假设我有两个模型/表。
public class ParentEntity
{
public Guid ID { get; set;}
public List<ChildEntity> ChildEntities { get; set; } // navigation property
}
public class ChildEntity
{
public Guid ID { get; set; }
public Guid ParentEntityID { get; set; } // foreign key
}
如果我运行这样的查询:
var parentEntities = await _context.ParentEntities.Where(x => x.ChildEntities.Any()).ToListAsync();
据我所知(主要基于实验(,这个查询不需要ChildEntity的显式水合(使用.Include(x => x.ChildEntities)
(。
如果我想在查询之外/列表具体化后对ChildEntities做些什么,我将需要显式地水合ChildEntities:
var parentEntities = await _context.ParentEntities.Include(x => x.ChildEntities)
.Where(x => x.ChildEntities.Any()).ToListAsync();
foreach (var parentEntity in parentEntities)
{
foreach (var childEntity in parentEntities)
{
// do something with childEntity
}
}
无论如何,这就是我的理解,这就是它的运作方式。然而,我希望能找到一些明确提到这一点的微软文档。我什么都找不到(我能想到使用的所有搜索关键字都指向了筛选包含的方向,这不是我想知道的(。
我想确信我的理解是正确的,而且我还没有得到";幸运的";通过已经从同一上下文中的其他查询水合的子实体。
Include
仅用于加载相关实体且仅用于此目的。它对过滤器或投影没有影响。如果不打算加载相关实体,则可以省略Include
。