我正在尝试从表中的表创建动态odata服务,这些服务在运行时才会知道.因此,在我的Web应用程序开始时,用户选择一个数据库,在C#中我找到该数据库中的所有表.
现在困难的部分是我想为数据库中的每个表创建odata服务端点,并在我的Web应用程序中相应地使用它们.问题是我不知道如何动态地做到这一点.编译时已知的数据库表有很多例子,但在这种情况下,直到我的用户第一次使用我的应用程序时才会有它们.
现在,.NET Core支持OData,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;
}
Run Code Online (Sandbox Code Playgroud)
调节器
[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 …Run Code Online (Sandbox Code Playgroud)