OdataModelConventionBuilder不了解DbContext生成的模型

时间:2013-04-04 14:06:02

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

我目前正在与一个项目上的WebApi OData合作,并遇到了一个非常令人沮丧的问题。我正在使用EF5 DbContext设置的Entity Framework数据库 - 拳头模型,这是Visual Studio 2012和.NET 4.5的默认设置。我的问题是,如果我在Entity Framework的实体上使用OdataModelConventionBuilder为OData端点生成我的Edm,则OData $元数据不会找到任何Key值,也不能正确生成实体之间的关联。

我认为这是因为DbContext生成的实体上没有DataAnnotation属性。如果我添加属性,键会突然起作用,但这不是解决方案,因为如果重新生成模型,这些属性将会丢失。

此问题是否有已知的解决方法?

我目前不得不使用ODataModelBuilder手工构建我的OData Edm,这显然很乏味且容易出错。

1 个答案:

答案 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模型。我们已安排当前发布。希望你的场景更简单。