9
votes

Frame-entité 4 - Héritage

J'essaie de comprendre les mappages d'héritage dans EF4.

Ma base de données a deux tables avec la structure suivante:

PersonCategory Table:

  • CatégorieId (int) (identité) (pk)
  • catégorieType (Nvarchar (50))

    Table de personne

    • PersonID (int) (Identité) (PK)
    • CatégorieId (FK de la table personnelle)
    • Nom (Nvarchar (50))
    • Description (Nvarchar (MAX))

      La table personnelle a quatre entrées chacune représentant une catégorie - Étudiant, cours de cours, personnel et conseiller.

      de la lecture articles En ligne, je pensais table par hiérarchie sera un modèle approprié pour ce scénario. Ainsi, dans EF4, j'ai créé quatre entités (étudiant, cours de cours, personnel et conseiller) qui héritent de la table des personnes. J'ai ensuite cartographié chacun d'eux à la table et a ajouté une condition à chacun (par exemple, la catégorieId = 1 pour l'entité étudiante et la catégorieId = 2 pour l'entité du personnel) pour différencier des autres. J'ai également supprimé la propriété CatégorieId de la table de la personne et j'ai fabriqué une classe abstraite. Mais je reçois l'erreur suivante parce que j'ai supprimé la propriété de la catégorieId de la table de personnes.

      Erreur 3015: problème dans les fragments de cartographie commençant par les lignes 101, 108, 114, 120, 126, 133: contrainte de clé étrangère 'fk_person_personcategory' de la personne (CatégorieId) à la table PersonCategory (CatégorieId) :: Cartographie insuffisante: clé étrangère doit être mappé sur une association ou des entités à participer à une association de clé étrangère du côté conceptuel.

      est la table par hiérarchie un modèle approprié pour ce scénario? Sinon, comment dois-je aborder ce scénario dans EF4?


0 commentaires

3 Réponses :


5
votes

Utiliser des colonnes discriminatoires dans des associations est problématique. Voir: -

http: // social. msdn.microsoft.com/forums/fr/adodototentityframework/Torthread/24380ee6-4753-46a2-a3ed-B1CB2E2D161C

"Le point clé est une colonne qui agira en tant que discriminateur ne peut pas être mappée à une association, à moins que sa participation ne soit pas nulle."


1 commentaires

Merci pour le pointeur. Je comprends que le point expliqué. Suis-je pour interpréter cela comme EF4 ne peut pas gérer cette situation? Parce que dans le modèle d'entité de mon application, je veux que les deux tables soient présentes avec une association. Comment puis-je aborder ce scénario?



0
votes

0 commentaires

0
votes

Pour table-per-hiérarchie, une seule table contient toutes les colonnes de tous types. Vous avez deux tables, donc je suis immédiatement méfiant.

Si vous allez pour la table-par type, alors ce n'est pas correct non plus. Vous ne seriez que pour avoir deux types, base et dérivés, avec la table de la catégorie fournissant les données des valeurs de propriété du type dérivées. Mais cela aurait besoin d'avoir le personnage comme la clé étrangère, ce qu'elle ne le fait pas.

Personnellement, je pense que vous êtes inutilement fragmentant vos entités en différents types. Vous pouvez mapper toutes les colonnes des deux tables à une entité ou si possible, modifiez le schéma de base de données en fonction de vos besoins.

Je vous suggère de travailler avec une base de données de test vide et de faire des modèles TPT et TPT-PREMIÈRES et examinez le schéma que EF crée pour votre configuration souhaitée.

Luke


0 commentaires