Asociaciones polimórficas en el marco de la entidad

Tengo una base de datos heredada que tiene algunas tablas que fueron diseñadas usandoAsociaciones polimórficas. Por asociaciones polimórficas, quiero decir que esas tablas pueden ser hijo de tablas diferentes de acuerdo con una columnaObjectType.

Ejemplo:

Documents la mesa tieneDocumentID (clave primaria de identidad), algunas otras columnas y 2 columnas especiales llamadasObjectType yObjectID.SiObjectType='STUDENT', ObjectID puntos aStudents mesa.SiObjectType='TEACHER', ObjectID puntos aTeachers mesa, etc.

Esto es similar aeste diseño (como se describe en el "enfoque sin clave externa") oéste (descrito como un antipatrón). Y obviamente, haysin restricciones de clave externa en esas columnas(AFAIK ninguna base de datos permitiría ese tipo de relación).

Estoy escribiendo una nueva capa de acceso a datos usando Entity Framework 6 (primero el código con Fluent API) que debería funcionar junto con el código existente. Dado que esta estructura de base de datos se implementó en cientos de clientes diferentes (cada uno con una base de código diferente y personalizaciones de base de datos diferentes), modificar la estructura de las tablas existentes no es una opción.

Mi pregunta es: ¿Cómo mapeo esas asociaciones polimórficas en mi modelo de código EF primero?

EDITAR: Parece que estaba tratando de diseñar la jerarquía de clases en las entidades incorrectas. Comprendí que tenía muchas "GenericChildTables" (como Documentos) que deberían apuntar a una entidad (no existente) que tendría una clave compuesta ObjectType + ObjectID. Y luego estaba tratando de crear esa nueva entidad (llamémosla "BusinessObject") y mapear mis entidades centrales (Estudiantes, Maestros, etc.) para que sean subtipos de este BusinessObject.

ESE diseño probablemente era simplemente incorrecto, y tal vez totalmente imposible porque esta nueva tabla que estaba creando (BusinessObject) dependía de StudentID / TeacherID, etc., por lo que no podía ser un padre de esas tablas. Utilizando algunas soluciones feas, podría crear ese BusinessObject como un solo hijo para cada entidad central, y asignar esos BusinessObjects a las tablas polimórficas, y estaba funcionando de hecho, pero con un diseño completamente incorrecto.

Entonces Yo viLa pregunta de Gert Ardold y me di cuenta de que lo que debería diseñarse como una jerarquía de clase NO era Estudiantes / Maestros / etc. (agrupados en una entidad genérica), sino cada una de esas ChildTables, que tenían diferentes subtipos de acuerdo con elObjectType discriminador: esos eran los tipos que deberían dividirse en subtipos.Vea mi solución en mi propia respuesta a continuación.

Respuestas a la pregunta(1)

Su respuesta a la pregunta