如何使用对持久基类型(实体框架 4)实例的引用深深地急切加载实体

Mah*_*l25 5 entity-framework-4

领域模型

以上是我们领域模型的简化版本。NotificationOrder具有对子类实例的引用(考虑ReferenceNumberBase逻辑抽象)。

问题:

我想要一个查询返回NotificationOrders满足 XYZ 的所有内容,并且我希望该查询急切地加载所有引用的实例CustomerCase(包括该图的所有相关对象,除了Group暂时忘记该问题)。

我已经尝试寻找解决方案,但我发现的所有问题的解决方案都相当于CustomerCase直接作为根对象查询。

我想要这样的东西:

    var query = ObjectContext.CreateObjectSet<NotificationOrder>.Where(e => e.NotificationType == "Foo");
    return ((ObjectSet<NotificationOrder>) query).Include("ReferenceNumberBase");
Run Code Online (Sandbox Code Playgroud)

但是,这不会加载任何其他相关对象的Vehicle实例CustomerCase。我如何表达这一点,以便 EF 了解我想要的急切负载(我非常想避免多次往返/通知顺序)?

注意:由于CustomerCase是派生类型,因此我无法使用以下内容进行正常的传递包含:

    var query = ObjectContext.CreateObjectSet<NotificationOrder>.Where(e => e.NotificationType == "Foo");
    return ((ObjectSet<NotificationOrder>) query).Include("ReferenceNumberBase.Vehicle"); // 
Run Code Online (Sandbox Code Playgroud)

由于该Vehicle属性是派生CustomerCase类型的成员,而不是ReferenceNumberBase 类型,因此我们得到如下错误:

“EntityType 'Model.ReferenceNumberBase' 未声明名为 'Vehicle' 的导航属性。”

我也不能使用,query.OfType<CustomerCase>...因为查询类型是NotificationOrder, 而不是 ReferenceNumberBase (或者我可以以某种方式?)。

附:我们正在使用带有 EF4 的自我跟踪 POCO 实体(尚未升级到 4.1)

编辑:我搜索了更多,大约一年前,这似乎是 Include() 方法的限制(至少在当时)。这是否准确?从那时起是否已解决?[来源如下]

http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/a30351ab-5024-49a5-9eb4-798043a2b75d

http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions/suggestions/1057763-inheritance-eager-loading?ref=title

https://connect.microsoft.com/VisualStudio/feedback/details/594289/in-entity-framework-there-should-be-a-way-to-eager-load-include-navigation-properties-of-a-派生类