当通过学习去文章关于实体框架MSDN相关实体负荷,我碰到了以下内容:
它也可以加载热切相关实体的多个级别 。 下面的如何做到这两者的收集和参考导航属性显示的示例查询。
... [实施例证明以上] ...
需要注意的是目前还无法过滤相关实体被载入其中 。 包括将始终在所有相关实体之中。
这似乎略显混乱,因为这两种说法似乎是有悖于对方。 我失去了一些东西在这里?
例如,我可以指定Mother
导航属性应包括为每个Child
在Children
DBSet我查询,如下所示:
Dim myQuery = From children In context.Children.Include("Mother")
Select child
这是否意味着Father
的导航属性将成为每一个急切地评估Child
?
如果不是这种情况( Include
仅热切加载你告诉它),有没有办法来急切地加载所有的导航性能,而无需指定他们?
是的,强调了这种方式实在是有点混乱。 和你的困惑也由你碰巧把重点放在基准导航属性造成的事实。
看着藏品清楚。
它是目前无法滤除相关实体是装
这意味着:你只能加载所有实体在一个子集合,而不是满足一些条件的实体。 千万不要将其他导航性能比中指定的加载Include
。
该Include
方法开始是与你展示字符串参数的方法。 后,加入的扩展方法,其允许通过表达式指定导航属性:
context.Children.Include(c => c.Mother)
尤其是当收集Include
d:
context.Parents.Include(c => c.Children)
似乎很自然的集合可以过滤:
context.Parents.Include(c => c.Children.Where(x => x.IsActive))
它编译,但是这是不可能的(运行时异常)。 其原因是,表达仅用于为了调用原来获得的资产净值属性的名称Include
方法(与所述字符串参数)。
我想这就是为什么这个限制是你指的是后强调的原因。
有没有办法来急切地加载所有的导航性能,而无需指定它们
不,没有。 这将是“危险的”,因为有许多Includes
是一个真正的性能杀手。 你最好指定Includes
仔细。