我目前正在与一个项目上的WebApi OData合作,并遇到了一个非常令人沮丧的问题。我正在使用EF5 DbContext设置的Entity Framework数据库 - 拳头模型,这是Visual Studio 2012和.NET 4.5的默认设置。我的问题是,如果我在Entity Framework的实体上使用OdataModelConventionBuilder为OData端点生成我的Edm,则OData $元数据不会找到任何Key值,也不能正确生成实体之间的关联。
我认为这是因为DbContext生成的实体上没有DataAnnotation属性。如果我添加属性,键会突然起作用,但这不是解决方案,因为如果重新生成模型,这些属性将会丢失。
此问题是否有已知的解决方法?
我目前不得不使用ODataModelBuilder手工构建我的OData Edm,这显然很乏味且容易出错。
答案 0 :(得分:1)
您可以部分使用ODataConventionModelBuilder,即为您提供通过属性提供的信息。假设您的“客户”类型的关键属性为“名称”和“客户”实体集,而不是像
那样做ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
var customers = builder.Entityset<Customer>("Customers");
return builder.GetEdmModel();
你可以做点什么,
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
var customers = builder.Entityset<Customer>("Customers");
customers.EntityType.HasKey(c => c.Name); // tell the key explicitly through code
return builder.GetEdmModel();
这应该推断模型的其余部分。
此外,我们还有bug跟踪功能,可以重新使用Entityframework或其他库创建的EDM模型。我们已安排当前发布。希望你的场景更简单。