OData异常复杂类型'WebTools.Order'通过属性'Customer'引用实体类型'WebTools.Customer'

时间:2013-03-15 17:05:52

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

我开始使用OData和Entity Framework。

我创建了一个暴露客户的Controller。在模型(edmx)中,只有一个实体(Customer),一切正常(数据正在呈现)。

现在,当我添加第二个实体(订单)(从数据库更新模型,选择订单)时,1到多个(1个客户到多个订单)会自动设置。

我什么都不做,当我编译/运行控制器时,我收到了这个错误:

Line 23:         builder.EntitySet(Of Customer)("Customers")
Line 24:         Return builder.GetEdmModel()  --> Exception Here
Line 25: 
Line 26:     End Function

复杂类型'WebTools.Order'通过属性'Customer'引用实体类型'WebTools.Customer'。

如果我删除订单实体,它就可以。

我不确定问题是否与方程式或“实体框架”中OData / WebAPI部分的“配置”有关。

1 个答案:

答案 0 :(得分:14)

我假设模型构建器无法找出实体类型Order的键属性。您可以通过几种方式帮助模型构建器

  1. builder.EntitySet<Order>("orders");。这会添加新的实体集“订单”,并且还具有将“订单”类型标记为实体类型的效果。您还必须指定“订单”的关键属性。

  2. 使用[Key]属性标记“订单”类型的关键属性(或属性)。

  3. 如果您讨厌属性并希望在代码中执行此操作,则可以执行builder.EntitySet<Order>("orders").EntityType.HasKey(o => order.KeyProperty);