Учитывая следующую модель...
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
в один раунд.
Спасибо за отзыв!