sqlquery related lazy framework data c# entity-framework-4.1 code-first entity-relationship eager-loading

c# - lazy - loading related data entity framework



Cargar entidades/colecciones anidadas con Entity Framework (2)

Estoy intentando cargar con entusiasmo todas las entidades relacionadas o la colección de Entidad en una llamada. Mis entidades se parecen a:

Class Person { public virtual long Id { get; set; } public virtual string FirstName { get; set; } public virtual string LastName { get; set; } } Class Employee { public virtual long Id { get; set; } public DateTime AppointmentDate { get; set; } public virtual ICollection<EmployeeTitle> Titles { get; set; } public virtual Person Person { get; set; } } Class EmployeeTitle { public virtual long Id { get; set; } public virtual bool IsCurrent { get; set; } public virtual Title Title { get; set; } } Class Title { public virtual long Id { get; set; } public virtual string Code { get; set; } public virtual string Description { get; set; } }

Lo que estoy tratando de hacer es si llamo a un método para cargar a todos los empleados, el resultado debe incluir persona, lista de títulos de empleado, incluido el código y la descripción del título I, he podido llegar al tercer nivel, es decir, obtener el empleado con la persona y la lista de EmployeeTitle. No sé cómo obtener la información del título con EmployeeTitle. Mi código para obtener esto es:

Context.Employees.Include("Person").Include(e => e.Titles).ToList();

Por favor arroje algo de luz sobre cómo lograr esto. Gracias por adelantado.


Puedes probar esto:

Context.Employees .Include(e => e.Person) .Include(e => e.Titles.Select(t => t.Title)) .ToList();

Select puede aplicarse a una colección y carga las propiedades de navegación del siguiente nivel en el gráfico de objetos.


Ya que esta es la primera página en mi búsqueda en google, solo quería publicar esto.

La respuesta de Slauma está bien. Pero se recomienda usar Load () en lugar de ToList () si no planea usar la lista. Así sería:

Context.Employees .Include(e => e.Person) .Include(e => e.Titles.Select(t => t.Title)) .Load();