在EF 4.1中加载所有导航属性及其子项的最佳方法是什么

Ami*_*ail 2 .net c# linq entity-framework-4.1

我试图得到一个List<EntityType>,每个项目有大约15个我需要加载的导航属性,一些导航属性有一个我需要加载的navingation属性,这是一个示例代码

class AA
{
  public EntityReference<B> Bobj
  {
     get;
     set;
  }
  public EntityCollection<C> CCollection
  {
     get;
     set;
  }
}
class B
{
  public EntityCollection<X> XCollection
  {
     get;
     set;
  }
}
class C
{
  public EntityReference<Y> YObj
  {
     get;
     set;
  }
}

List<AA> AList = Dbcontext.AAs.Where(a => a.ID==4).ToList();
Run Code Online (Sandbox Code Playgroud)

我想每个项目中List<AA>已经载入了BObj与它XCollection和所有CCollection带项目YObj的每一个.

我尝试使用它来加载它们Include,Load但我认为有一种优雅的方法可以做到这一点

我也尝试设置LazyLoadingEnabledfalse但简化版,加载全图我不知道为什么?

所以,我需要最好的方法来加载我的完整图表 EntityType

我正在使用数据库第一种方法EF 4.1C# 4.0

Str*_*ior 5

这是我拾起的一个巧妙的技巧:

List<AA> AList = Dbcontext.AAs.Where(a => a.ID==4)
    .Select(a => new {a, a.Bobj, a.CCollection})
    .ToList().Select(o => o.a).ToList();

Dbcontext.Bs.Where(b => b.A.ID==4)
    .Select(b => new {b, b.XCollection})
    .ToList();
Dbcontext.Cs.Where(c => c.A.ID==4)
    .Select(c => new {c, c.YObj})
    .ToList();
Run Code Online (Sandbox Code Playgroud)

实体框架将弄清楚这些不同对象是如何连接的.您将进行可管理的往返次数(在这种情况下为3次),并且生成的SQL查询结果将具有相对较少的重复数据.