9

Estoy tratando de comprender las asignaciones de herencia en EF4.Entity Framework 4 - Herencia

Mi base de datos tiene dos tablas con la siguiente estructura:

PersonCategory Tabla:

  • CategoryID (int) (identidad) (PK)
  • CategoryType (nvarchar (50))

Persona Tabla

  • PersonaID (int) (identidad) (PK)
  • CategoryID (FK de la tabla PersonCategory)
  • Nombre (nvarchar (50))
  • Descripción (nvarchar (max))

La tabla PersonCategory tiene cuatro entradas, cada una de las cuales representa una categoría: Estudiante, Instructor de curso, Personal y Asesor.

De la lectura articles en línea pensé que tabla por jerarquía será un modelo adecuado para este escenario. Entonces, en EF4, creé cuatro entidades (Estudiante, CourseInstructor, Staff y Advisor) heredadas de la tabla Person. Luego correlacioné cada uno de ellos con la tabla Person y agregué una condición a cada uno (por ejemplo, CategoryID = 1 para la entidad Student y CategoryID = 2 para la entidad Staff) para diferenciarlos de los demás. También eliminé la propiedad CategoryID de la tabla Person y la convertí en clase abstracta. Pero recibo el siguiente error porque eliminé la propiedad CategoryId de la tabla Person.

Error 3015: Problema en fragmentos de mapeo a partir de las líneas 101, 108, 114, 120, 126, 133: Foreign restricción de clave '' FK_Person_PersonCategory de persona mesa (CategoryID) a tabla PersonCategory (CategoryID) :: mapeo insuficiente : La clave externa debe asignarse a algunos AssociationSet o EntitySets que participan en una asociación de clave externa en el lado conceptual.

¿Es Table On Hierarchy un modelo adecuado para este escenario? Si no, ¿cómo debería abordar este escenario en EF4?

Respuesta

5

Usar columnas discriminatorias en asociaciones es problemático. Ver: -

http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/24380ee6-4753-46a2-a3ed-b1cb2e2d161c

"El punto clave es una columna que actuará como discriminador no puede estar asignada a un assocation menos que particpates en condición no nulo."

+0

Gracias por el puntero. Entiendo el punto explicado. ¿Debo interpretar esto porque EF4 no puede manejar esta situación? Porque en el modelo de entidad de mi aplicación quiero que ambas tablas estén presentes con una asociación. ¿Cómo me acercaría a este escenario? – muruge

0

Para tabla-por-jerarquía, una sola tabla contiene todas las columnas para todos los tipos. Tienes dos tablas, así que de inmediato sospecho.

Si va a Table-per-Type, tampoco está bien.Solo podría tener dos tipos, base y derivada, con la tabla PersonCategory que proporciona los datos para los valores de propiedad del tipo derivado. Pero, esto necesitaría tener el PersonID como la clave foránea, que no es así.

Personalmente, creo que estás fragmentando innecesariamente tus entidades en diferentes tipos. Puede asignar todas las columnas de ambas tablas a una entidad, o si es posible, cambiar el esquema de la base de datos para que se adapte mejor a sus necesidades.

Sugeriría trabajar con una base de datos de prueba vacía y hacer diseños TPT y TPH primero y mirar el esquema que EF construye para la configuración deseada.

Luke

Cuestiones relacionadas