1

谢谢你的想法

我正在使用实体框架 5.0,模型优先。

使用每个类的表(或每个具体类型的表)模式映射表。

表 A 1..许多(抽象)表 B

表 B 有 2 个子类

B1 & B2

B2 有第三个表的外键,比如说表 C(许多 B2 ... 1 C),但这不是父类 B 的属性。

急切加载是应用程序的默认设置,我想在查询表 B2 时包含表(或集合)C - 相当于(对实体的伪 linq):

from A in _db.A
.Include(A=>A.B.OfType<B2>())
.Include(A=>A.B.OfType<B2>().Include(C))
select A

感谢您对如何强制加载此表的任何想法

4

1 回答 1

2

问题的核心Include(A=>A.B.OfType<B2>())是不支持。

据我了解 ADO.Net 团队似乎他们不想支持部分加载的子集合。(而且我倾向于同意他们的观点。)在 Linq-to-sql 中有DataLoadOptions,但没有与它们等效的 EF。这可以解释为什么也不支持Includewith ,因为它会告诉 EF 部分加载s 的集合。OfTypeB

此外,扩展方法Include只是IQueryable对象本身的 Include 方法(如果存在)的包装。采取ObjectQuery.Include:一个非常简单的方法,只有一个字符串作为参数(相同的DbQuery.Include),其中包含要包含的导航属性的路径(_db.A.Include("B"))。换句话说:您只能使用可以解析为 MemberExpression 的字符串。并且B.OfType<>()是一种方法。

长篇大论来解释为什么你不能包括C:通往的路径C无效。

可以

_db.B.OfType<B2>().Include(b => b.A).Include(b => b.C)

但这可能不会给你你想要的结果。

于 2012-10-07T21:54:56.557 回答