现在在.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)吗? –