不包括负载所有相关实体或指定的?(Does Include load all related ent

2019-10-18 06:00发布

当通过学习去文章关于实体框架MSDN相关实体负荷,我碰到了以下内容:

它也可以加载热切相关实体的多个级别 。 下面的如何做到这两者的收集和参考导航属性显示的示例查询。

... [实施例证明以上] ...

需要注意的是目前还无法过滤相关实体被载入其中 。 包括将始终在所有相关实体之中。

这似乎略显混乱,因为这两种说法似乎是有悖于对方。 我失去了一些东西在这里?

例如,我可以指定Mother导航属性应包括为每个ChildChildren DBSet我查询,如下所示:

Dim myQuery = From children In context.Children.Include("Mother")
              Select child

这是否意味着Father的导航属性将成为每一个急切地评估Child

如果不是这种情况( Include仅热切加载你告诉它),有没有办法来急切地加载所有的导航性能,而无需指定他们?

Answer 1:

是的,强调了这种方式实在是有点混乱。 和你的困惑也由你碰巧把重点放在基准导航属性造成的事实。

看着藏品清楚。

它是目前无法滤除相关实体是装

这意味着:你只能加载所有实体在一个子集合,而不是满足一些条件的实体。 千万不要将其他导航性能比中指定的加载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仔细。



文章来源: Does Include load all related entities or the specified ones?