感谢您的想法
我正在使用实体框架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
感谢您对我如何强制加载此表的任何想法
答案 0 :(得分:2)
问题的核心是Include(A=>A.B.OfType<B2>())
不受支持。
据我了解ADO.Net团队,他们似乎不想支持部分加载的子集合。 (而且我倾向于同意它们。)在Linq-to-sql中有DataLoadOptions,但没有EF等价物。这可以解释为什么Include
OfType
也不受支持,因为它会告诉EF部分加载B
s的集合。
此外,扩展方法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)
但这可能不会给你你所追求的结果。