Entity framework 将包含的查询拆分为多个查询

Entity framework 将包含的查询拆分为多个查询,entity-framework,entity-framework-5,Entity Framework,Entity Framework 5,我首先使用的是EF5代码,有这样一个查询: var query = DbSet.Include(ent => ent.Websites) .Include(ent => ent.Addresses) .Include(ent => ent.IndustryType) .Include(ent => ent.Factors) .Include(ent =>

我首先使用的是EF5代码,有这样一个查询:

        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个以上的include,则查询执行速度非常慢。我已经知道原因了

我可以省略,例如,DmpNodes包含并使用延迟加载加载导航属性,但这将导致数百个查询

我正在寻找一种方法来拆分此查询,以便首先加载带有地址、行业类型和因素的实体。通过第二个查询,用其余的填充这些实体


这是可能的还是有另一个好的解决方案?

如果使用相同的上下文进行单独的L2E查询,EF将自动在内存中加入相关的实体


在你这边写一个测试。选择
网站
,然后在使用相同上下文和导航属性的单独查询中选择
地址

如果使用相同的上下文进行单独的L2E查询,EF将自动连接内存中的相关实体


在你这边写一个测试。选择
网站
,然后在使用相同上下文和导航属性的单独查询中选择
地址

如果您执行使用相同上下文的单独请求,EF将自动加入内存中的相关实体。您能告诉我这在代码中是什么样子吗?最后,我需要填充所有导航属性的实体对象。选择网站,然后在使用相同上下文的单独查询中选择地址,查看导航属性是否正确填写!是否存在需要所有包含项的用例?我强烈希望查询服务于特定的用例。@MaxS我不知道它这么简单:-)就像一个符咒一样工作。如果您使用相同的上下文进行单独的请求,EF将自动在内存中加入相关的实体。您能在代码中告诉我这是什么样子吗?最后,我需要填充所有导航属性的实体对象。选择网站,然后在使用相同上下文的单独查询中选择地址,查看导航属性是否正确填写!是否存在需要所有包含项的用例?我强烈希望查询服务于特定的用例。@MaxS我不知道它这么简单:-)就像一个符咒。在请求之间共享上下文是个坏主意。使用它获取相关实体是一个更糟糕的想法,因为它使代码依赖于执行历史。但是,您可以通过显式加载集合在一个请求(和上下文)中使用关系修复功能。我完全同意
context
生命周期应该尽可能短的事实。我所说的请求不是指
HTTPRequest
,而是指DB请求(L2E查询)。我已经编辑了我的答案。在请求之间共享上下文不是个好主意。使用它获取相关实体是一个更糟糕的想法,因为它使代码依赖于执行历史。但是,您可以通过显式加载集合在一个请求(和上下文)中使用关系修复功能。我完全同意
context
生命周期应该尽可能短的事实。我所说的请求不是指
HTTPRequest
,而是指DB请求(L2E查询)。我已经编辑了我的答案。