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
}
しかし、これはそれを行うための最良の方法ですか?
つまり、コレクションには、フィルタを満たす要素のみが含まれていても、最適化されていないはずです。
「はい」の場合はどうすればよいですか?
非常に興味深いを見つけることができませんされてきた、ということは注目に値しますが
は –
他のオプションがオンであることは注目に値します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)はこれだけです。上記と同様に、これらは支払われた解決策です。 –
この回答は私には分かりません。 .NET MVC + SQL Server環境でカスタムアプリケーションを開発するには、単純にnugetパッケージMicrosoft.AspNet.ODataを使用します。 .NET Core + MongoDB環境では、MongoDB ODBCドライバ+ナゲットパッケージMicrosoft.AspNetCore.OData(現時点ではアルファ版)を使用することをお勧めします。 –