現在在.NET Core中支持OData,並且發佈了7.2.0。但它可以用於MongoDB嗎?我已經搜查過,但是我找不到任何一種說法。在.NET Core Web API中使用OData for 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
}
但是,這是做的最好方法是什麼?
我的意思是,不應該只包含滿足過濾器,更優化的元素?
如果是,我該如何實現?
很有意思,謝謝 –
值得注意的是,有其他選項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)就是這樣做的。像以上一樣,這些都是付費解決方案。 –
這個答案對我而言並不清楚。對於.NET MVC + SQL Server環境中的自定義應用程序開發,我們只需使用nuget包Microsoft.AspNet.OData。在.NET Core + MongoDB環境中,推薦使用MongoDB ODBC驅動程序+ nuget軟件包Microsoft.AspNetCore.OData(目前使用alpha)嗎? –