Eagerly/explicitly 加载 "child" 个只有导航 属性 到 "parent" 的实体

Eagerly/explicitly load "child" entities with only navigation property to "parent"

我有一个 EF Core 2.1 Code First 模型,在两个 类:

之间具有 "parent-child" 类型关系
class Parent
{
    public int Id {get; set;}
    public string Name {get; set;}
}

class Child
{
    public int Id {get; set;}
    public string Description { get; set; }
    public Parent Parent { get; set; }
}

我想加载某个父实体,并确保它的所有子实体也都已加载。但是没有导航属性到Child,我也不能修改类,所以没法加一个

dbContext.Parents
    .Include(p => p.???)
    .Find(1);

我想我可以进行第二个查询,我可以反向查找所有内容:

dbContext.Children.Where(c => c.Parent.Id == loadedParent.Id)

但这似乎不是很有效,尤其是当您加载多个父项并执行如下可怕的操作时:

var parentIds = loadedParents.Select(p => p.Id);
var children = dbContext.Children.Where(c => parentIds.Contains(c.Parent.Id));

当您只有 "child-to-parent" 导航 属性 时,有没有办法确保加载实体?

make sure that all its Child entities are loaded too

所以加载 Child 个实体:

var children = dbContext.Children.Include(c => c.Parent)
    .Where(c => c.Parent.Id == 1).ToList();

如果您想获得多个 parents。

,则使用比 c.Parent.Id == 1 更广泛的选择标准

如有必要,您可以通过访问 Local 集合列出加载的 parents:

va parents = dbContext.Parents.Local;