我正在移植一个“老人”。 EF项目到EF 6.1 Code First。该项目使用TPH(每个层次表)来存储客户。客户是用户的子类,订单有客户。客户属于特定的子商店。在UML中像这样:
我已经使用这样的鉴别器列映射了客户:
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)
是否有人可以了解导致此错误的原因?如果需要,请随时提出更多信息。
答案 0 :(得分:0)
对于遇到同样问题的人,我会在这里回答我自己的问题。问题是我为用户&gt;客户添加了自定义映射,但忘记将订单列表下推到客户类(这是在用户中)。修复映射解决了问题。