【问题标题】:OData v4 EDM model - separate configuration classes?OData v4 EDM 模型 - 单独的配置类?
【发布时间】:2015-02-18 10:13:41
【问题描述】:

我想将 OData 4 与 WebApi2 和 EF 一起使用,而对于后者,我得到了大约 30 个模型配置类。现在,由于 OData 需要 EDM 模型,我想以某种方式重用我现有的模型配置 - 或者至少将配置类放入不同的库中以保持我的 web api 配置易于管理。

我尝试使用EntitySetConfiguration<'1> 创建 EDM 实体类型配置类,但是该类的构造函数是内部的。那么 - 有没有办法在运行时使用 DbContext 自动构建 EDM 模型或创建单独的配置类?

【问题讨论】:

    标签: c# asp.net entity-framework asp.net-web-api odata


    【解决方案1】:

    您可以通过反射使用 DBContext 构建 edm 模型。

    public static void Register(HttpConfiguration config)
    {
        var modelBuilder = new ODataConventionModelBuilder();
        modelBuilder.ContainerName = "EntityContainer";
    
        using(var ctx = new MyDBContext()) 
        {
            var dbSets = ctx.GetType().GetProperties();
            foreach(var set in dbSets)
            {
                if(set.PropertyType.IsGenericType)
                {
                     method = entitySet.MakeGenericMethod(set.PropertyType.GenericTypeArguments[0]);
                     bool containsEntity = false;
                     foreach (var entity in modelBuilder.EntitySets)
                     {
                         if (entity.GetType().Equals(set.PropertyType.GenericTypeArguments[0]))
                             containsEntity = true;
    
    
                         if (!containsEntity)
                             method.Invoke(modelBuilder, new[] { set.Name });
                      } 
                 }
             }
         }
         _config.MapODataServiceRoute(
               routeName: "entities",
               routePrefix: API_ENTITIES_BASE_URI,
               model: modelBuilder.GetEdmModel()
               );
    }
    

    希望对你有帮助。

    【讨论】:

    • entitySet 的类型是什么?
    猜你喜欢
    • 2020-10-06
    • 2014-07-31
    • 1970-01-01
    • 2021-11-15
    • 2020-07-22
    • 2013-03-25
    • 1970-01-01
    • 2015-06-01
    • 2017-10-21
    相关资源
    最近更新 更多