我有六个班级,如下所示-
Class A{
int ValA;
ICollection<B> AllBs;
}
Class B{
int ValB;
ICollection<C> AllCs;
}
Class C{
int ValC;
ICollection<D> AllDs;
}
Class D{
int ValD;
ICollection<E> AllEs;
}
Class E{
int ValE;
ICollection<F> AllFs;
}
Class F{
int ValF;
}
我必须急于加载具有特定ID的A实体,并且我希望结果必须急于加载所有嵌套集合。
我编写了以下代码来实现相同的功能-
var entity = _context.A.Where(a => a.Id == 1)
.Include(a => a.AllBs
.Select(b => b.AllCs
.Select(c => c.AllDs
.Select(d => d.AllEs
.Select(e => e.AllFs)))))
.FirstOrDefault();
我是否正确编写了include语句?所有嵌套集合均未正确加载。它们将被加载到AllB,AllC和其他集合中。
请帮助。
答案 0 :(得分:0)
如果这是EF Core,您将要使用
_context.A
.Include(a => a.AllBs)
.ThenInclude(b => b.AllCs)
.ThenInclude(c => c.AllDs)
.ThenInclude(d => d.AllEs)
.ThenInclude(e => e.AllFs)
.Single(a => a.Id == 1)
Intellisense可能会给您带来一些悲伤的苦恼,但确实可以解决问题。
对于EF6,您的陈述应该起作用,因此,如果没有,我将专门研究您的映射,以确保您的FK能够正确解析。我还将删除.Where()
和.FirstOrDefault()
,而在末尾使用.Single()
。在查询生成中这无关紧要,但是Include
语句最好放在任何过滤之前。使用SQL事件探查器捕获正在发送到服务器的SQL,以查看正在请求什么表以及它们如何联接。这可能会突出显示一些FK分辨率错误。