在中使用导航集合属性.谓词在哪里需要显式水合作用



假设我有两个模型/表。

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

相关内容

最新更新