tutorial net mvc framework first existing español code asp entity-framework entity-framework-4 entity-framework-5 entity-framework-4.1

net - Cómo incluir un objeto secundario de un objeto secundario en Entity Framework 5



entity framework tutorial español (4)

Con EF Core en .NET Core puede usar:

return DatabaseContext.Applications .Include(a => a.Children).ThenInclude(c => c.ChildRelationshipType));

Estoy utilizando Entity Framework 5 code first y ASP.NET MVC 3 .

Estoy luchando para que un objeto secundario del objeto hijo se rellene. A continuación están mis clases ...

Clase de aplicación;

public class Application { // Partial list of properties public virtual ICollection<Child> Children { get; set; } }

Clase de niños:

public class Child { // Partial list of properties public int ChildRelationshipTypeId { get; set; } public virtual ChildRelationshipType ChildRelationshipType { get; set; } }

Clase ChildRelationshipType:

public class ChildRelationshipType { public int Id { get; set; } public string Name { get; set; } }

Parte del método GetAll en el repositorio para devolver todas las aplicaciones:

return DatabaseContext.Applications .Include("Children");

La clase Child contiene una referencia a la clase ChildRelationshipType. Para trabajar con los hijos de una aplicación, tendría algo como esto:

foreach (Child child in application.Children) { string childName = child.ChildRelationshipType.Name; }

Me sale un error aquí que el contexto del objeto ya está cerrado.

¿Cómo especifico que cada objeto hijo debe incluir el objeto ChildRelationshipType como lo hice anteriormente?


Si incluye la biblioteca System.Data.Entity , puede usar una sobrecarga del método Include() que toma una expresión lambda en lugar de una cadena. Luego puede Select() sobre niños con expresiones Linq en lugar de rutas de string .

return DatabaseContext.Applications .Include(a => a.Children.Select(c => c.ChildRelationshipType));


Terminé haciendo lo siguiente y funciona:

return DatabaseContext.Applications .Include("Children.ChildRelationshipType");


Un buen ejemplo del uso del patrón de Repositorio genérico y la implementación de una solución genérica para esto podría ser algo como esto.

public IList<TEntity> Get<TParamater>(IList<Expression<Func<TEntity, TParamater>>> includeProperties) { foreach (var include in includeProperties) { query = query.Include(include); } return query.ToList(); }