Entity framework 在实体中显式加载相关实体
我的对象图如下所示:Entity framework 在实体中显式加载相关实体,entity-framework,orm,entity-framework-5,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 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; }
}
然而,我不知道如何在ClassB_列表中为ClassC_列表加载每个子项,而不诉诸下面这样的垃圾:
classA.ClassB_List.ToList().ForEach(c => context.Entry(c).Collection("ClassC_List").Load());
var c = context.ClassA_list;
if (IWantTheRelatedTable)
{
c = c.Include("ClassB_List.ClassC_List");
}
var result = c.ToList();
我发现的另一种方法是在上下文中使用Include:
var c = context.ClassA_list
.Include("ClassB_List.ClassC_List")
.ToList();
如果DBContext模型中已经包含了该属性,那么这对于ClassA实例列表来说是很好的,但我通常不想这样做,只想显式地使用load。
有什么想法吗?您使用了两种方式来快速加载: 包括 负载 如果您需要一些灵活性,可以执行以下操作:
classA.ClassB_List.ToList().ForEach(c => context.Entry(c).Collection("ClassC_List").Load());
var c = context.ClassA_list;
if (IWantTheRelatedTable)
{
c = c.Include("ClassB_List.ClassC_List");
}
var result = c.ToList();
构建IQueryable,然后当它包含了您需要的所有内容时,您就可以执行它。由于我喜欢为单亲实体而不是列表加载相关实体,所以可以通过显式加载而不使用即时加载来完成这一操作吗?