以上是我们的域模型的简化版本。 NotificationOrder
引用了一个子类的实例(从逻辑上考虑ReferenceNumberBase
)。
问题:
我希望查询返回满足XYZ的所有NotificationOrders
,我希望该查询热切地加载CustomerCase
的所有引用实例(包括该图的所有相关对象,Group
除外暂时忘掉那个问题。)
我已经尝试过寻找解决方案,但我找到的只是解决问题的解决方案,相当于直接查询CustomerCase
作为根对象。
我想要这样的事情:
var query = ObjectContext.CreateObjectSet<NotificationOrder>.Where(e => e.NotificationType == "Foo");
return ((ObjectSet<NotificationOrder>) query).Include("ReferenceNumberBase");
但是,这不会加载Vehicle
CustomerCase
实例或任何其他相关对象。我如何表达这一点,以便EF理解我想要的急切负载(我非常希望避免多次往返/通知顺序)?
注意:由于CustomerCase
是派生类型,我无法做正常的传递,包括使用以下内容:
var query = ObjectContext.CreateObjectSet<NotificationOrder>.Where(e => e.NotificationType == "Foo");
return ((ObjectSet<NotificationOrder>) query).Include("ReferenceNumberBase.Vehicle"); //
因为Vehicle
属性是派生CustomerCase
类型的成员,而不是ReferenceNumberBas
类型的成员,而是我们得到如下错误:
“EntityType'Mode.ReferenceNumberBase'不会声明名为'Vehicle'的导航属性。”
我也不能使用query.OfType<CustomerCase>...
,因为查询类型是NotificationOrder
,而不是ReferenceNumberBase(或者我可以以某种方式?)。
PS。我们正在使用EF4自我跟踪POCO实体(尚未升级到4.1)
编辑:我已经搜索了一些,并且大约一年前,这看起来是Include()方法的限制(至少在那个时候)。这是否准确,从那时起就被贴上了? [来源]