Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api 如何使用.Net Core 2.2创建动态生成器Odata?_Asp.net Web Api_Asp.net Core_Odata - Fatal编程技术网

Asp.net web api 如何使用.Net Core 2.2创建动态生成器Odata?

Asp.net web api 如何使用.Net Core 2.2创建动态生成器Odata?,asp.net-web-api,asp.net-core,odata,Asp.net Web Api,Asp.net Core,Odata,我将Odata与.NET核心一起使用 还有我的Startup.cs文件,如上所述 public void ConfigureServices(IServiceCollection services) { ...... services.AddOData(); services.AddODataQueryFilter(); services.AddMvc() .SetCompatibilityVersion(CompatibilityVe

我将Odata与.NET核心一起使用

还有我的Startup.cs文件,如上所述

public void ConfigureServices(IServiceCollection services)
{
    ......

    services.AddOData();
    services.AddODataQueryFilter();

    services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}



public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{       
     ..............

     app.UseMvc(b =>
     {
         b.MapRoute("default", "api/{controller}/{action}");
         b.MapRoute("defaultApi", "api/{controller}/{id}");
         b.Count().Filter().OrderBy().Expand().Select().MaxTop(null);
         b.MapODataServiceRoute("odata", null, GetEdmModel());
     });
}



private static IEdmModel GetEdmModel()
{
    ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
    builder.Namespace = "WebAPI";
    builder.ContainerName = "DefaultContainer";
    builder.EnableLowerCamelCase();
    builder.EntitySet<User>("User");
    builder.EntityType<User>()
         .Filter(Microsoft.AspNet.OData.Query.QueryOptionSetting.Allowed);
    builder.EntitySet<Camera>("Camera");
    builder.EntityType<Camera>() 
         .Filter(Microsoft.AspNet.OData.Query.QueryOptionSetting.Allowed);
    return builder.GetEdmModel();
}
public void配置服务(IServiceCollection服务)
{
......
services.AddOData();
services.AddODataQueryFilter();
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{       
..............
app.UseMvc(b=>
{
b、 MapRoute(“默认”、“api/{controller}/{action}”);
b、 MapRoute(“defaultApi”、“api/{controller}/{id}”);
b、 Count().Filter().OrderBy().Expand().Select().MaxTop(null);
b、 MapODataServiceRoute(“odata”,null,GetEdmModel());
});
}
私有静态IEdmModel GetEdmModel()
{
ODataConventionModelBuilder=新ODataConventionModelBuilder();
builder.Namespace=“WebAPI”;
builder.ContainerName=“DefaultContainer”;
builder.EnableLowerCamelCase();
builder.EntitySet(“用户”);
builder.EntityType()
.Filter(Microsoft.AspNet.OData.Query.QueryOptionSetting.Allowed);
建筑商实体集(“摄像机”);
builder.EntityType()
.Filter(Microsoft.AspNet.OData.Query.QueryOptionSetting.Allowed);
返回builder.GetEdmModel();
}

我想将odata与动态模型一起使用,动态模型是数据库模型类。创建新数据库表时,我必须创建builder
builder.EntitySet(“摄影机”)

已经很晚了,但如果有人需要,我会这样做:

private static IEdmModel GetEdmModel()
{
    ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
    var entityMethod = builder.GetType().GetMethod("EntitySet", new Type[] { typeof(string) });
    var assemblies = AppDomain.CurrentDomain.GetAssemblies();
    foreach (var assembly in assemblies)
    {
        var entityTypes = assembly.GetTypes().Where(t => t.IsSubclassOf(typeof(BaseEntity)));

        foreach (var type in entityTypes)
        {

            entityMethod.MakeGenericMethod(type)
                .Invoke(builder, new object[] { type.Name });

        }
    }
    return builder.GetEdmModel();
}