2008-12-15 4 views
0

J'ai cette table dans ma base de données.Comment mapper une table liée à une entité héritée (table par hiérarchie)?

alt text http://img166.imageshack.us/img166/3133/testdbschemafy5.png

Avec Entity Framework je voudrais avoir quelque chose comme ça:

alt text http://img166.imageshack.us/img166/5721/testdbschemaefdv5.png

J'ai utilisé une table par hiérarchie héritage, donc j'ajouté une nouvelle entité pour la prime utilisateur et le mapper à l'entité utilisateur avec des conditions à la propriété IsPremiumUser. Je voudrais avoir l'associé de table PremiumAccount à l'entité PremiumUser, mais cela ne fonctionne pas comme je l'ai fait: -/J'ai ce message d'erreur:

Erreur 3021: Problème de mappage Fragment à partir de ligne 113: Chacune des colonnes suivantes dans le tableau PremiumAccount est mis en correspondance avec plusieurs propriétés secondaires conceptuels: PremiumAccount.UserID est mis en correspondance

y at-il une solution à mon problème? Puis-je associer l'entité PremiumAccount à une entité héritée? Y a-t-il une autre façon de faire cela?

Répondre

2

Je pense que le champ PK du sous-type devrait être supprimé (car il hérite de son supertype). Cela dit, ce n'est pas un bon candidat à l'héritage. L'héritage d'entité ne doit être effectué que si le type ne peut pas changer pour une entité. C'est plus un candidat «rôle», donc une vraie relation 1: 1. Le fait est que l'utilisateur peut perdre/gagner le rôle Premium sur une base régulière, mais vous ne pouvez pas changer le type d'une instance d'entité existante (== lignes de table) même si cela semble possible en modifiant simplement les données dans le base de données. Le mappage d'héritage concerne les règles strictes, vous ne pouvez pas les plier, car l'héritage dans les entités consiste à interpréter les données dans une base de données, car les modèles relationnels ne connaissent pas le concept d'héritage (bien que certaines bases trichent en autorisant l'héritage en DDL SQL comme postgresql)

+0

L'entité PremiumUser ne contient pas de PK, en raison de l'héritage par hiérarchie. Toutes les colonnes sont dans le supertype, entité utilisateur. Je vois, que ma conception dessicion n'est pas si bon, je dois réfléchir à la façon de changer cela. Thx Frans pour votre réponse :-) – Mariusz