Dado el siguiente modelo ...carga explícita de las colecciones nieto de la FE 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; }
}
... podemos carga ansiosa con Include
un Parent
con toda Children
y Grandchildren
en un solo paso, así:
context.Parents.Include(p => p.Children.Select(c => c.Grandchildren))
Es posible para cargando de forma explícita?
La colección infantil se puede cargar explícitamente de esta manera:
Parent parent = context.Parents.Find(parentId);
context.Entry(parent).Collection(p => p.Children).Load();
Pero tratar de cargar a los niños de una manera similar como con Include
...
context.Entry(parent)
.Collection(p => p.Children.Select(c => c.Grandchildren)).Load();
... no lo hace Recopilar und la sobrecarga de la cadena de Collection
...
context.Entry(parent).Collection("Children.Grandchildren").Load();
... lanza una excepción ("... no hay rutas de puntos permitidas ...").
Lo único que encontré trabajo es cargar explícitamente el Grandchildren
en un bucle:
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();
Me pregunto si me he perdido algo y si hay alguna otra forma de cargar explícitamente el GrandChildren
en una ida y vuelta .
Gracias por votar con antelación!
¿Has probado 'Collection (...). Query(). Include (...). Load()'? Si no funciona tan bien, me temo que no es compatible. Generalmente 'Load' es equivalente a manejar' RelatedEnd.Load' desde ObjectContext API. –
@Ladislav: Por favor, pon esto en una respuesta :) ¡Funciona! – Slauma