c# - 在 .NET Core Web API 中为 MongoDB 使用 OData

标签 c# mongodb asp.net-web-api asp.net-core odata

.NET Core 现在支持 OData,并且 7.2.0 已发布。但它可以与 MongoDB 一起使用吗?我已经搜索过,但我找不到任何可以说这种或另一种说法的东西。

编辑:

我找到了一个 nuget 包 https://www.nuget.org/packages/microsoft.aspnetcore.odataConfigureServices 我添加了这个:

这似乎对我有用:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddOData();
    services.AddSingleton<IODataModelManger, ODataModelManager>(DefineEdmModel);
    ...
}

private ODataModelManager DefineEdmModel(IServiceProvider services)
{
    var modelManager = new ODataModelManager();

    var builder = new ODataConventionModelBuilder();
    builder.EntitySet<TestDTO>(nameof(TestDTO));
    builder.EntityType<TestDTO>().HasKey(ai => ai.Id); // the call to HasKey is mandatory
    modelManager.AddModel(nameof(Something), builder.GetEdmModel());

    return modelManager;
}

Controller

[HttpGet("all")]
public async Task<IQueryable<TestDTO>> Get()
{
    // plug your entities source (database or whatever)
    var test = await TestService.GetTest();

    var modelManager = (IODataModelManger)HttpContext.RequestServices.GetService(typeof(IODataModelManger));
    var model = modelManager.GetModel(nameof(Something));
    var queryContext = new ODataQueryContext(model, typeof(TestDTO), null);
    var queryOptions = new ODataQueryOptions(queryContext, HttpContext.Request, Provider);

    return queryOptions
        .ApplyTo(test, new ODataQuerySettings
        {
            HandleNullPropagation = HandleNullPropagationOption.True
        }, null)
        .Cast<TestDTO>();
}

服务

public async Task<IQueryable<TestDTO>> GetTest()
{
    return await GenericRepository.TestAll();
}

存储库

public async Task<IQueryable<TEntity>> TestAll()
{
    var res = new GetManyResult<TEntity>();
    try
    {
        DateTime startTime = DateTime.Now;
        var collection = GetCollection<TEntity>().AsQueryable();
        var entities = collection.ToArray<TEntity>().AsQueryable();
        return entities
}

但这是最好的方法吗?

我的意思是,集合不应该只包含满足过滤器的元素,并且更加优化吗?

如果是,我该如何实现?

最佳答案

我认为目前在 MongoDB 的 Visual Studio 市场中只有一种连接服务可用。 Link Here.

ODBC Driver for MongoDB provides high-performance and feature-rich connectivity solution for ODBC-based applications to access MongoDB databases from Windows, MacOS, Linux. Full support for standard ODBC API functions, MongoDB data types and SQL queries implemented in our driver makes interaction of your database applications with MongoDB fast, easy and extremely handy.

看起来它可以处理您在连接到 MongoDB 时所期望的所有事情。

但值得注意的是,这只是一条线索,我一直找不到任何“开源”版本

关于c# - 在 .NET Core Web API 中为 MongoDB 使用 OData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45216875/

相关文章:

c# - 有人可以滥用 LINQ 来解决这个金钱难题吗?

c# - 为什么 NumberFormatInfo 中包含货币而不是其他单位

mongodb - 如何删除MongoDB中的多个关系文档?

java - Spring webflux,mongodb : Document is not saved into database

javascript - AngularJS Web API - IE 不发布表单正文

c# - .NET Framework 和 .NET Standard 冲突(兼容性问题)

c# 用具有基类型的字典覆盖方法

mongodb - 如何通过比较子字段构造 MongoDB Linq Any() 查询

c# - 我应该如何使用不允许异步 Controller 操作的 CMS 处理异步 API 调用?

asp.net-web-api - ASP .Net 4 Web Api RC + Autofac 手动解析