Учитывая следующую модель ...
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
a Parent
со всеми Children
и Grandchildren
за один шаг, например:
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
в одну поездку.
Спасибо за отзыв заранее!