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;
我有一个 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;