jueves, 28 de agosto de 2014

Herencias en Entity Framework 6.0


Herencia TPT
La herencia tabla por tipo (TPT) utiliza una tabla separada en la base de datos para mantener los datos de propiedades no heredados y las propiedades clave de cada tipo en la jerarquía de herencia
A partir del siguiente modelo:

Al impactar el modelo, tenemos las siguientes tablas en la base de datos:

 

Se mapeo la entidad "EmpeadoInterno" con una nueva tabla llamada "Empleados_EmpleadoInterno".



Herencia TPH
Apartir del siguiente modelo


Ejecutamos el script en la base de datos:
A partir de la entidad Empleado, realizar las siguientes acciones en modelo.
Eliminar "TipoEmpleado"
Crear dos entidades "Externo" y "Interno" que deriven de Empleado
Cortar y pegar la propiedad "CostoxHora" en la entidad Externo
Cortar y pegar la propiedad "Salario" en la entidad Interno

La herencia tabla por jerarquía (TPH) utiliza una tabla de base de datos para mantener los datos para todos los tipos de entidades en una jerarquía de herencia.
 
El modelo quedara de la siguiente manera:
 La entidad Empleado debera ser abstracta.

Cuando se crea la entidad Externo que deriva de la entidad Empleado todos sus atributos, tener presente el siguiente mapeo de los campos.
Para la entidad Externo se agrega un condicion cuando la entidad es su campo "Tipo empleado" que no es visible y no es mapeada es igual a "externo". El unico campo mapeado es Costo x hora.


Cuando se crea la entidad Interno que deriva de la entidad Empleado todos sus atributos, tener presente el siguiente mapeo de los campos.
Para la entidad Interno se agrega un condicion cuando la entidad es su campo "Tipo empleado" que no es visible y no es mapeada es igual a "interno". El unico campo mapeado es Salario

Para agregar un empleado Interno o Externo a la base de datos:


Para recuperar la entidad empleado según el tipo:



2 comentarios:

  1. Excelente tutorial
    Tengo una duda, como podría pasar a un Empleado Externo a Empleado Interno, pero que siga teniendo el mismo Id
    Por ejemplo el Externo Empleado.Id = 1 y al pasarlo a Interno el Id = 1 debe de conservarse.
    Es posible hacer esto o no estoy aplicando bien la Herencia a mi modelo.
    Saludos.

    ResponderEliminar
  2. Si utilizas la herencia TPH no tenes problemas ya que debes modificar el tipo de empleado independientemente del id del empleado. Saludos.

    ResponderEliminar