1

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

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

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

我目前不得不使用 ODataModelBuilder 手动构建我的 OData Edm,它被证明是乏味且容易出错的。

4

1 回答 1

2

您可以以部分方式使用 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();

这应该可以推断出模型的其余部分。

此外,我们有此错误跟踪以重用由 Entityframework 或其他库创建的 EDM 模型。我们已将其安排在当前版本中。希望你的情况会更简单。

于 2013-04-04T16:12:52.503 回答