web-dev-qa-db-ja.com

MongoDB用の.NETCore WebAPIでのODataの使用

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
}

しかし、これはそれを行うための最良の方法ですか?

つまり、コレクションには、より最適化された、フィルターに適合する要素のみを含めるべきではありませんか?

はいの場合、どうすればこれを達成できますか?

12
Gerald Hughes

現在、MongoDBのビジュアルスタジオマーケットプレイスで利用できる接続サービスは1つだけだと思います。 ここにリンク

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

MongoDBに接続するときに期待するすべてのことを処理できるようです。

しかし、それは単なる証跡であり、「オープンソース」バージョンを見つけることができなかったことは注目に値します

3
Digitalsa1nt

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メソッド、サーバーの応答、およびサポートされている認証スキームについて説明します。 [データモデル]セクションには、アプリケーションで使用できるテーブル、ビュー、およびストアドプロシージャが一覧表示されます。

0
Jin Thakur