【问题标题】: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()
);
}
希望对你有帮助。