我有一个EF Core 2.1代码优先模型,在两个类之间具有“父子”类型关系:
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));
只有当您具有“父级对子级”导航属性时,是否可以确保加载实体?
答案 0 :(得分:1)
确保也加载了其所有子实体
因此加载Child
实体:
var children = dbContext.Children.Include(c => c.Parent)
.Where(c => c.Parent.Id == 1).ToList();
如果要获得多个父母,则使用比c.Parent.Id == 1
更广泛的选择标准。
如有必要,您可以通过访问Local
集合来列出已加载的父项:
va parents = dbContext.Parents.Local;