Associações polimórficas na estrutura de entidades

Eu tenho um banco de dados legado que possui algumas tabelas que foram projetadas usandoAssociações polimórficas. Por associações polimórficas, quero dizer que essas tabelas podem ser filho de diferentes tabelas de acordo com uma colunaObjectType.

Exemplo:

Documents mesa temDocumentID (chave primária de identidade), algumas outras colunas e duas colunas especiais chamadasObjectType eObjectID.E seObjectType='STUDENT', ObjectID aponta paraStudents mesa.E seObjectType='TEACHER', ObjectID aponta paraTeachers mesa etc.

Isso é semelhante aeste design (conforme descrito na "abordagem sem chave estrangeira") oueste (descrito como um antipadrão). E obviamente existemsem restrições de chave estrangeira nessas colunas(AFAIK nenhum banco de dados permitiria esse tipo de relacionamento).

Estou escrevendo uma nova camada de acesso a dados usando o Entity Framework 6 (código primeiro com a API Fluent) que deve funcionar lado a lado com o código existente. Como essa estrutura do banco de dados foi implantada em centenas de clientes diferentes (cada um com uma base de código diferente e personalizações diferentes do banco de dados), modificar a estrutura das tabelas existentes não é uma opção.

Minha pergunta é: Como mapeio essas associações polimórficas no meu modelo EF primeiro código?

EDITAR: Parece que eu estava tentando projetar a hierarquia de classes nas entidades erradas. Meu entendimento era que eu tinha muitas "GenericChildTables" (como Documents) que deveriam apontar para uma entidade (não existente) que teria uma chave composta ObjectType + ObjectID. E então eu estava tentando criar essa nova entidade (vamos chamá-la de "BusinessObject") e mapear minhas entidades principais (Alunos, Professores etc.) para serem subtipos deste BusinessObject.

Esse design provavelmente estava errado, e talvez totalmente impossível, porque essa nova tabela que eu estava criando (BusinessObject) dependia do StudentID / TeacherID etc., portanto, não poderia ser o pai dessas tabelas. Usando algumas soluções feias, pude criar esse BusinessObject como filho único para cada entidade principal e mapear esses BusinessObjects para as tabelas polimórficas, e estava funcionando de fato, mas com um design completamente errado.

Então eu viA pergunta de Gert Ardold e percebemos que o que deveria ser projetado como uma hierarquia de classes NÃO era Alunos / Professores / etc (agrupados em uma entidade genérica), mas cada uma dessas Tabelas de Crianças, que estavam segurando subtipos diferentes de acordoObjectType discriminador - esses eram os tipos que deveriam ser divididos em subtipos.Veja minha solução em minha própria resposta abaixo.

questionAnswers(1)

yourAnswerToTheQuestion