我想尝试以下工作:
_dbmsParentSections = FactoryTools.Factory.PdfSections
.Include(x => x.Children.OrderBy(y => y.Order).ToList())
.Include(x => x.Hint).Include(x => x.Fields)
.Where(x => x.FormId == FormId && x.Parent == null)
.OrderBy(o => o.Order)
.ToList();
Run Code Online (Sandbox Code Playgroud)
导致异常的部分是:
.Include(x => x.Children.OrderBy(y => y.Order).ToList())
Run Code Online (Sandbox Code Playgroud)
编辑:
经过进一步观察,
_dbmsParentSections.ForEach(x => x.Children = x.Children.OrderBy(y => y.Order).ToList());
Run Code Online (Sandbox Code Playgroud)
为我完成了这项工作(在初次Factory通话之后没有Children.OrderBy).
这是这里解释的问题的第二步:EF 4.1代码优先:如何加载相关数据(父子孙子)?.在@Slauma的指导下,我使用这种方法成功检索了数据:
var model = DbContext.SitePages
.Where(p => p.ParentId == null && p.Level == 1)
.OrderBy(p => p.Order) // ordering parent
.ToList();
foreach (var child in model) { // loading children
DbContext.Entry(child)
.Collection(t => t.Children)
.Query()
.OrderBy(t => t.Order) // ordering children
.Load();
foreach (var grand in child.Children) { // loading grandchildren
DbContext.Entry(grand)
.Collection(t => t.Children)
.Query()
.OrderBy(t => t.Order) // ordering grandchildren
.Load();
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这种方法有效,但它会向数据库发送许多查询,而我正在寻找一种方法,只需一个查询即可完成所有操作.在@Slauma的指导下(在上面链接的答案中解释),我已经将查询更改为:
var model2 = DbContext.SitePages
.Where(p => p.ParentId …Run Code Online (Sandbox Code Playgroud) entity-framework parent-child ef-code-first entity-framework-4.1