声明的导航属性类型xxx与指定导航的结果不兼容

时间:2015-02-23 11:29:54

标签: c# asp.net entity-framework ef-code-first entity-framework-6

我正在移植一个“老人”。 EF项目到EF 6.1 Code First。该项目使用TPH(每个层次表)来存储客户。客户是用户的子类,订单有客户。客户属于特定的子商店。在UML中像这样: Class diagram

我已经使用这样的鉴别器列映射了客户:

   modelBuilder.Entity<User>()
            .Map<Customer>(m => m.Requires("IsNormalCustomer").HasValue(1))
            .Map<Printer>(m => m.Requires("IsNormalCustomer").HasValue(2));

因此,所有客户的IsNormalCustomer值均为&#39; 1&#39;。打印机也是用户,但不是客户。

在我的订单存储库中,我有相同的代码来查找特定子商店的所有订单。

orders = GetPendingOrders().Where(o => o.Customer.SubShop.SubShopId == subshopId);

如果我不在子商店上过滤,则查询运行正常,但通过过滤我得到以下异常:

  

System.Data.Entity.Core.EntityCommandCompilationException:准备命令定义时发生错误。有关详细信息,请参阅内部异常---&GT; System.Data.Entity.Core.MetadataException:声明的导航属性类型Fotogoed.Data.Order.Customer与指定导航的结果不兼容。      在System.Data.Entity.Core.Query.PlanCompiler.PreProcessor.ValidateNavPropertyOp(PropertyOp op)

是否有人可以了解导致此错误的原因?如果需要,请随时提出更多信息。

1 个答案:

答案 0 :(得分:0)

对于遇到同样问题的人,我会在这里回答我自己的问题。问题是我为用户&gt;客户添加了自定义映射,但忘记将订单列表下推到客户类(这是在用户中)。修复映射解决了问题。