2017-07-20 37 views
5

现在在.NET Core中支持OData,并且发布了7.2.0。但它可以用于MongoDB吗?我已经搜查过,但是我找不到任何一种说法。在.NET Core Web API中使用OData for MongoDB

编辑:

我找到了一个N​​uGet包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; 
} 

控制器

[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 
} 

但是,这是做的最好方法是什么?

我的意思是,不应该只包含满足过滤器,更优化的元素?

如果是,我该如何实现?

回答

3

我认为目前只有在MongoDB的视觉工作室市场上有一种可用的连接服务。 Link Here.

ODBC驱动程序的MongoDB提供高性能,功能丰富的 连接解决方​​案为基于ODBC的应用程序从Windows,MacOS的,Linux的访问MongoDB的 数据库。全面支持标准ODBC 在我们的 驱动程序中实现的API函数,MongoDB数据类型和SQL查询使您的数据库应用程序与MongoDB 的交互变得快速,简单且非常方便。

看起来它会处理连接到MongoDB时所期望的所有事情。

然而,值得注意的是,这只是一个线索,我一直无法找到任何“开源”版本

+1

很有意思,谢谢 –

+1

值得注意的是,有其他选项Visual Studio市场。 (完全披露,CData Software是我的雇主)。 CData Software提供的ADO.NET提供程序提供了.NET中的本地体验:https://marketplace.visualstudio.com/items?itemName=CDATASOFTWARE.MongoDBADONETProvider。如果您打算为MongoDB创建一个OData接口,CData Software的[API Server](http://www.cdata.com/apiserver)就是这样做的。像以上一样,这些都是付费解决方案。 –

+1

这个答案对我而言并不清楚。对于.NET MVC + SQL Server环境中的自定义应用程序开发,我们只需使用nuget包Microsoft.AspNet.OData。在.NET Core + MongoDB环境中,推荐使用MongoDB ODBC驱动程序+ nuget软件包Microsoft.AspNetCore.OData(目前使用alpha)吗? –