type tph multiple herencia framework first column code entity-framework inheritance include

entity-framework - tph - order entity framework



Marco de la entidad: herencia e inclusiĆ³n (1)

Asuma la siguiente jerarquía:

class Department { EntityCollection<Employee> Employees; } class Employee { string Name; } class RemoteEmployee : Employee { Country Location; EntityReference<Country> CountryReference; }

Entonces, el departamento contiene una lista de empleados. Hay una jerarquía de tipos de empleados, algunos tipos hacen referencia a otras entidades. Supongamos que tenemos que cargar departamento con sus empleados. Está bien, no es un problema:

dataContext.Departments.Include("Employees")

Esto devuelve tipos concretos de empleado (es decir, RemoteEmployee para los Remote). Ahora tenemos que cargar la ubicación con los empleados remotos.

dataContext.Departments.Include("Employees").Include("Employees.Location") - Error: no such property in Employee dataContext.Departments.Include("Employees").Include("RemoteEmployees.Location") - Error: no such property in Department

¿Qué debo especificar en Incluir para cargar la ubicación con RemoteEmployee?


Estoy bastante seguro de que lo que CatZ sugiere no funciona.

No creo que pueda hacer esto usando Include, pero puede lograr el mismo efecto usando un truco de proyección. Vea cómo ordenar relaciones en el marco de la entidad.

Lo que debes hacer es algo como esto:

var results = from d in ctx.Departments select new { d, employees = d.Employees.Select( e => new { e, location = e is RemoteEmployee ? (e as RemoteEmployee).Location : null } ) }; foreach (var result in results) { var re = result.d.Employees.First() as RemoteEmployee; Console.WriteLine("{0} {1} works from {2}", re.Firstname, re.Surname, re.Location.Name); }

Tenga en cuenta que no necesita utilizar los tipos anónimos para obtener los datos, básicamente, hacer que la proyección tenga un efecto secundario al completar las colecciones en su departamento debido a una característica de Entity Framework llamada fixup.

Espero que esto ayude a Alex