2017-07-20 35 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)嗎? –