El método Include() funciona bastante bien para las listas en los objetos. Pero, ¿y si necesito ir a dos niveles de profundidad? Por ejemplo, el siguiente método devolverá ApplicationServers con las propiedades incluidas que se muestran aquí. Sin embargo, ApplicationsWithOverrideGroup es otro contenedor que contiene otros objetos complejos. ¿Puedo hacer un Include() en esa propiedad también? ¿O cómo puedo conseguir que esa propiedad se cargue por completo?Entity Framework - Include Multiple Levels of Properties
Tal como está ahora, este método:
public IEnumerable<ApplicationServer> GetAll()
{
return this.Database.ApplicationServers
.Include(x => x.ApplicationsWithOverrideGroup)
.Include(x => x.ApplicationWithGroupToForceInstallList)
.Include(x => x.CustomVariableGroups)
.ToList();
}
rellenará solamente la propiedad Enabled (abajo) y no la aplicación o propiedades CustomVariableGroup (abajo). ¿Cómo hago que esto suceda?
public class ApplicationWithOverrideVariableGroup : EntityBase
{
public bool Enabled { get; set; }
public Application Application { get; set; }
public CustomVariableGroup CustomVariableGroup { get; set; }
}
Hola, ¿Por qué obtengo una excepción 'La expresión debe ser una expresión miembro' cuando intento esto: Para incluir una colección y luego una colección de un nivel hacia abajo:' query.Include (e => e.Level1Collection.Select (l1 => l1.Level2Collection)) '. –
@BobHorn, tengo el mismo problema ... En mi caso, la anidación va en el fondo de varias capas, logré hacer una inclusión que usted señaló. En el SQL que se generó, pude ver que todas las columnas están regresando con un nombre de alias diferente como c1, c2 algo así. Mi pregunta es, ¿cómo puedo formar una colección DTO anidada de todos mis incluye :(.. Puede ser que usted puede tomar el ejemplo anterior, en el que estamos devolviendo todas las columnas sin ningún DTO personalizado (que a su vez es una colección de DTO) – TechQuery