明确加载实体内的相关实体

时间:2014-01-16 11:38:59

标签: entity-framework orm entity-framework-5

我有如下对象图:

Public ClassA
{
   public int Id { get; set; }
   public virtual ICollection<ClassB> ClassB_List { get; set; }
}

Public ClassB
{
   public int Id { get; set; }
   public virtual ICollection<ClassC> ClassC_List { get; set; }
}

Public ClassC
{
   public int Id { get; set; }
}

现在我想做的是因为我在DBContext级别禁用了延迟加载,对于给定的ClassA实例,我想加载所有相关的实体(ClassBList和ClassCList)。 我可以使用:

加载ClassB_List的嵌套集合
context.Entry(classA).Collection("ClassB_List").Load();

但是,我不知道如何在ClassB_List中为ClassC_List加载每个子项而不诉诸这样的垃圾:

classA.ClassB_List.ToList().ForEach(c => context.Entry(c).Collection("ClassC_List").Load());

我知道的另一种方法是使用Include():

在上下文中使用预先加载
var c = context.ClassA_list
                          .Include("ClassB_List.ClassC_List")
                          .ToList();

如果我已经在DBContext模型中包含了属性,那么对于ClassA实例的列表来说这很好,但我不经常这样做,只是想使用显式加载。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您已经使用了两种方式来加载:

  • 包含
  • 加载

如果你想要一些灵活性,你可以这样做:

 var c = context.ClassA_list;

 if (IWantTheRelatedTable)
 {
    c = c.Include("ClassB_List.ClassC_List");
 }

 var result = c.ToList();

你构建了一个IQueryable,然后当你拥有所有包含时,你需要执行它。