C# 在MongoDB的.NET核心Web API中使用OData
OData现在在.NETCore中受支持,7.2.0已经发布。但是它可以与MongoDB一起使用吗?我已经找过了,但我找不到任何能说明这种或那种情况的东西 编辑: 我找到了一个nuget软件包,并在C# 在MongoDB的.NET核心Web API中使用OData,c#,mongodb,asp.net-web-api,asp.net-core,odata,C#,Mongodb,Asp.net Web Api,Asp.net Core,Odata,OData现在在.NETCore中受支持,7.2.0已经发布。但是它可以与MongoDB一起使用吗?我已经找过了,但我找不到任何能说明这种或那种情况的东西 编辑: 我找到了一个nuget软件包,并在ConfigureServices中添加了以下内容: 这似乎对我有用: public void ConfigureServices(IServiceCollection services) { ... services.AddOData(); services.AddSingl
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;
}
public void配置服务(IServiceCollection服务)
{
...
services.AddOData();
服务。添加Singleton(定义MModel);
...
}
专用ODataModelManager DefineEdmModel(IServiceProvider服务)
{
var modelManager=new ODataModelManager();
var builder=新的ODataConventionModelBuilder();
builder.EntitySet(nameof(TestDTO));
builder.EntityType().HasKey(ai=>ai.Id);//对HasKey的调用是必需的
modelManager.AddModel(nameof(某物),builder.GetEdmModel());
返回模型管理器;
}
控制器
[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>();
}
[HttpGet(“全部”)]
公共异步任务Get()
{
//插入您的实体源(数据库或其他)
var test=await TestService.GetTest();
var modelManager=(iodatamodelmanager)HttpContext.RequestServices.GetService(typeof(iodatamodelmanager));
var model=modelManager.GetModel(某物的名称);
var queryContext=new-ODataQueryContext(model,typeof(TestDTO),null);
var queryOptions=新的ODataQueryOptions(queryContext,HttpContext.Request,Provider);
返回查询选项
.ApplyTo(测试、新ODataQuerySettings
{
HandleNullPropagation=HandleNullPropagationOption.True
},空)
.Cast();
}
服务
public async Task<IQueryable<TestDTO>> GetTest()
{
return await GenericRepository.TestAll();
}
public异步任务GetTest()
{
return wait 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
}
公共异步任务TestAll()
{
var res=new GetManyResult();
尝试
{
DateTime startTime=DateTime.Now;
var collection=GetCollection().AsQueryable();
var entities=collection.ToArray().AsQueryable();
返回实体
}
但这是最好的方法吗
我的意思是,该系列不应该只包含符合过滤器要求的元素,从而更加优化吗
如果是,我该如何实现这一点?我认为目前在visual studio市场上,MongoDB只有一种连接服务可用 MongoDB的ODBC驱动程序提供了高性能和丰富的功能 基于ODBC的应用程序访问MongoDB的连接解决方案 来自Windows、MacOS、Linux的数据库。完全支持标准ODBC API函数、MongoDB数据类型和SQL查询在我们的 驱动程序使数据库应用程序与MongoDB交互 快速,简单,非常方便 看起来它可以处理连接到MongoDB时您希望它处理的所有事情 但是值得注意的是,这只是一个线索,我一直找不到任何“开源”版本MongoDB OData连接器
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 OData连接器应用程序使您能够以OData、JSONP、SOAP、RSS等流行格式安全地访问来自MongoDB的数据。
入门部分介绍如何建立到MongoDB的连接。在本部分中,您将找到设置所需连接属性和允许OData连接器访问MongoDB表的指南。
Supported OData部分显示OData连接器支持的OData语法,并指出查询实时数据时的任何限制。
OData连接器可以作为独立应用程序安装,也可以与服务器集成。在服务器配置部分,您将找到有关如何在现有服务器配置上安装OData连接器的信息。此处还列出了系统要求。您还将找到有关如何管理用户和部署SSL的说明。LOGG详细说明了可用的日志资源。
OData API允许从任何具有Web连接的应用程序访问数据。OData连接器支持所有主要的身份验证方案。本节介绍服务器支持的HTTP方法、服务器响应和支持的身份验证方案。
数据模型部分列出了应用程序可用的表、视图和存储过程。值得注意的是,Visual Studio Marketplace上还有其他选项。(完全公开,CData软件是我的雇主)。CData软件提供的ADO.NET Provider在.NET中提供了本机体验:。如果您希望为MongoDB创建OData接口,则使用CData软件即可。如上所述,这些都是付费解决方案。我不清楚这个答案。对于.NET MVC+SQL Server环境中的自定义应用程序开发,我们只需使用nuget包Microsoft.AspNet.OData。在.NET Core+MongoDB环境中,建议(也是唯一可用的解决方案)使用MongoDB ODBC驱动程序+nuget软件包Microsoft.AspNetCore.OData(当前为alpha)?@Aydus Matthew请记住,这是在7月份回答的。由于问题的性质,我的答案可能会过时。在这种情况下,我的答案可能会变成VS 2017和OData软件包。我相信你所说的是在我的答案发布之后。在某个时候,我可能会更新ab用最新的响应更新答案。很抱歉,我很困惑。为什么您需要ODBC驱动程序来创建OData服务?@gyozokudor在我发布答案时,OPs解决方案中唯一一个与MongoDB一起工作的双向数据驱动程序应该是OBDC驱动程序,这显然不再是事实。如果有机会,我会更新我的回答反映了当前实现OP要求的最佳实践。从技术上讲,如果MongoDB和OData可以在同一个过程中运行(注意OData本身根本不与实体框架绑定),那么没有什么可以阻止您查询MongoDB和返回OData,因此answe