【发布时间】:2018-09-28 01:58:55
【问题描述】:
使用 EF 2.0 Core,代码优先,我有以下定义自引用表的实体:
class EntityX
{
public int EntityXId { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
//navigation properties
public EntityX Parent { get; set; }
public ICollection<EntityX> Children { get; set; }
}
我想以“树”的形式检索所有 EntityX 对象及其子对象
我可以这样做:
var entities = context.EntityX
.Include(p => p.Parent)
.Include(p => p.Children)
.Where(p => p.Parent == null);
当我打电话给entities.ToList() 时,这得到了我想要的:parent 实体及其子代的列表编辑只有“第一代”子代。当我省略 Where() 子句时,我会得到所有实体及其子代。
我不明白 为什么 Where() 子句有效。属于Children 集合的对象具有Parent。为什么不省略?
编辑:我的问题已得到解答,但请注意,我对 Include() 工作原理的理解是错误的。
【问题讨论】:
-
Where子句只影响根元素。至于递归加载的孩子,情况可能并非如此,而是在最初包含的孩子之后延迟加载所有内容。
标签: entity-framework linq