ODataが.NETCoreでサポートされるようになり、7.2.0がリリースされました。しかし、MongoDBで使用できますか?検索しましたが、なんとなく言うものが見つかりませんでした。
編集:
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
}
しかし、これはそれを行うための最良の方法ですか?
つまり、コレクションには、より最適化された、フィルターに適合する要素のみを含めるべきではありませんか?
はいの場合、どうすればこれを達成できますか?
現在、MongoDBのビジュアルスタジオマーケットプレイスで利用できる接続サービスは1つだけだと思います。 ここにリンク
MongoDB用のODBCドライバーは、Windows、MacOS、LinuxからMongoDBデータベースにアクセスするためのODBCベースのアプリケーション向けの高性能で機能豊富な接続ソリューションを提供します。標準のODBC API関数、MongoDBデータ型、およびドライバーに実装されたSQLクエリの完全なサポートにより、データベースアプリケーションとMongoDBの対話が高速、簡単、非常に便利になります。
MongoDBに接続するときに期待するすべてのことを処理できるようです。
しかし、それは単なる証跡であり、「オープンソース」バージョンを見つけることができなかったことは注目に値します
MongoDB ODataコネクタ http://cdn.cdata.com/help/DGB/cd/ 無料ではありません https://www.cdata.com/drivers/mongodb/download/ 概要
MongoDB OData Connectorアプリケーションを使用すると、OData、JSONP、SOAP、RSSなどの一般的な形式でMongoDBからデータに安全にアクセスできます。はじめにセクションでは、MongoDBへの接続を確立する方法について説明します。このセクションでは、必要な接続プロパティを設定し、ODataコネクタがMongoDBテーブルにアクセスできるようにするためのガイドを紹介します。サポートされているODataセクションには、ODataコネクタでサポートされているOData構文が表示され、ライブデータをクエリする際の制限が示されます。 ODataコネクタは、スタンドアロンアプリケーションとしてインストールすることも、サーバーと統合することもできます。 「サーバー構成」セクションには、既存のサーバー構成にODataコネクターをインストールする方法に関する情報があります。システム要件もここにリストされています。また、ユーザーを管理し、SSLをデプロイする方法についての説明もあります。ロギングは、利用可能なロギングリソースの詳細です。 OData APIを使用すると、Web接続を備えた任意のアプリケーションからデータにアクセスできます。 ODataコネクタは、すべての主要な認証スキームをサポートします。このセクションでは、サーバーでサポートされているHTTPメソッド、サーバーの応答、およびサポートされている認証スキームについて説明します。 [データモデル]セクションには、アプリケーションで使用できるテーブル、ビュー、およびストアドプロシージャが一覧表示されます。