我有如下对象图:
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实例的列表来说这很好,但我不经常这样做,只是想使用显式加载。 有什么想法吗?
答案 0 :(得分:0)
您已经使用了两种方式来加载:
如果你想要一些灵活性,你可以这样做:
var c = context.ClassA_list;
if (IWantTheRelatedTable)
{
c = c.Include("ClassB_List.ClassC_List");
}
var result = c.ToList();
你构建了一个IQueryable,然后当你拥有所有包含时,你需要执行它。