2017-07-20 23 views
5

ODataが.NET Coreでサポートされ、7.2.0がリリースされました。しかし、それはMongoDBで使用できますか?私は検索しましたが、どちらか一方の方法で何かを見つけることができませんでした。MongoDB用.NET Core Web APIでODataを使用

編集:私はnugetパッケージhttps://www.nuget.org/packages/microsoft.aspnetcore.odataを見つけたとConfigureServicesに、私はこの追加した

を、これは私のために働くようだ:

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のビジュアルスタジオ市場で利用可能な接続サービスは1つしかないと考えています。 MongoDBのためのLink Here.

ODBCドライバは、高性能およびWindows、MacOSの、LinuxからのMongoDBの データベースにアクセスするODBCベースのアプリケーションのための豊富な機能を備えた 接続ソリューションを提供します。 ドライバで実装された標準ODBC API関数、MongoDBデータ型、およびSQLクエリを完全にサポートすることで、データベースアプリケーションとMongoDBとの相互作用が迅速かつ簡単に、非常に便利になります。

MongoDBに接続するときに期待していたことをすべて処理するように見えます。それはあなたに感謝し、それが唯一の道であると私はすべての「オープンソース」のバージョン

+1

非常に興味深いを見つけることができませんされてきた、ということは注目に値しますが

は –

+1

他のオプションがオンであることは注目に値しますVisual Studioマーケットプレイス。 (全開示、CDataソフトウェアは私の雇用主です)。 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ドライバ+ナゲットパッケージMicrosoft.AspNetCore.OData(現時点ではアルファ版)を使用することをお勧めします。 –

関連する問題