在 EF 4.1 中显式加载孙项集合



给定以下模型...

public class Parent
{
    public int Id { get; set; }
    public ICollection<Child> Children { get; set; }
}
public class Child
{
    public int Id { get; set; }
    public ICollection<Grandchild> Grandchildren { get; set; }
}
public class Grandchild
{
    public int Id { get; set; }
}

。我们可以急切地加载Include一个包含所有ChildrenGrandchildrenParent,如下所示:

context.Parents.Include(p => p.Children.Select(c => c.Grandchildren))

显式加载是否有类似的东西?

子集合可以通过以下方式显式加载:

Parent parent = context.Parents.Find(parentId);
context.Entry(parent).Collection(p => p.Children).Load();

但是试图以与Include类似的方式加载孩子......

context.Entry(parent)
    .Collection(p => p.Children.Select(c => c.Grandchildren)).Load();

。不编译和Collection的字符串重载...

context.Entry(parent).Collection("Children.Grandchildren").Load();

。引发异常 ("...不允许使用虚线路径...")。

我发现唯一有效的方法是在循环中显式加载Grandchildren

Parent parent = context.Parents.Find(parentId);
context.Entry(parent).Collection(p => p.Children).Load();
foreach (var child in parent.Children)
    context.Entry(child).Collection(c => c.GrandChildren).Load();

我想知道我是否错过了什么,以及是否有其他方法可以在一次往返中明确加载GrandChildren

提前感谢您的反馈!

正如我在评论中指出的那样,您可以尝试先获取关系查询,然后添加包含并执行加载。像这样:

context.Entry(parent)
       .Collection(p => p.Children)
       .Query()
       .Include(c => c.Grandchildren) // I'm not sure if you can include grandchild directly  
       .Load();

相关内容

  • 没有找到相关文章

最新更新