【发布时间】:2013-07-10 22:22:44
【问题描述】:
我使用的是 EF5 Code First 并且有这样的查询:
var query = DbSet.Include(ent => ent.Websites)
.Include(ent => ent.Addresses)
.Include(ent => ent.IndustryType)
.Include(ent => ent.Factors)
.Include(ent => ent.Factors.Select(fact => fact.Objectives))
.Include(ent => ent.DmpNodes)
.Include(ent => ent.DmpNodes.Select(node => node.DmpNodeConnections));
如果我使用超过 4 个包含,则查询执行速度很慢。我已经知道这是为什么了。
我可以省略例如DmpNodes 包含并使用延迟加载加载该导航属性,但这将导致数百个查询。
我正在寻找一种方法来拆分此查询,以便我可以首先加载实体,例如地址、行业类型和因素。然后用第二个查询填充这些实体。
这是可能的还是有其他好的解决方案?
【问题讨论】:
-
如果您使用相同上下文执行单独的请求,EF 将自动加入内存中的相关实体。
-
你能告诉我这在代码中是什么样子的吗?最后,我需要填充所有导航属性的实体对象。
-
好吧,在你这边写一个测试。在使用相同上下文的单独查询中选择网站,然后选择地址,看看导航属性是否填写正确!
-
有没有需要all包含的用例?我强烈希望有针对特定用例的查询。
-
@MaxS 我没有意识到它这么简单 :-) 就像一个魅力。
标签: entity-framework entity-framework-5