2013-09-30 4 views
3

Je crée une application avec de nombreux objets différents (tables), dont beaucoup ont besoin d'avoir une relation un-à-plusieurs un objet "Attribute". Par exemple, je pourrais avoir cinq objets différents - A, B, C, D, E - et chacun d'eux doit avoir une propriété Attributes - A.Attributes, B.Attributes, etc.Entity Framework Code Première configuration avec plusieurs relations un-à-plusieurs pointant vers une seule table

Ma question est, comment serait le meilleur moyen de structurer cela dans EF Code First? Cette classe d'attribut peut finir par avoir 15-20 classes différentes qui ont une relation avec elle.

Actuellement, une configuration pour l'un des « parents » des classes ressemble à ceci:

 HasMany(rdp => rdp.Attributes) 
      .WithOptional() 
      .WillCascadeOnDelete(); 

Cependant, cela va créer une colonne de clé étrangère sur la table d'attributs (par exemple, « A_Id », « B_Id » , etc). Donc, si j'ai 20 classes différentes avec des attributs, la table Attribute aura 20 clés étrangères différentes.

Existe-t-il une meilleure façon de structurer cela?

+0

Serait-il raisonnable de faire des attributs un [ComplexType] (http://msdn.microsoft.com/en-us/data/jj591583.aspx)? –

+0

@JeremyCook: Un type complexe, d'après ce que je sais, n'est bon que pour les relations one-to-one. Chaque classe parente (A, B, C, etc.) peut avoir zéro, un ou plusieurs attributs, donc je ne pense pas qu'un type complexe puisse fonctionner. – Amberite

Répondre

2

Vous pouvez introduire un type AttributeList qui correspond à sa propre table. C'est à dire. vous pourriez modéliser la liste en tant qu'entité. A, B, C, D, E auraient une association un-à-un avec AttributeList, avec la clé étrangère à l'AttributeList sur les classes A, B, C, D et E.

Chaque objet AttributeList contient de nombreux attributs ou, en d'autres termes, une relation un-à-plusieurs de AttributeList à Attribute.

Vous disposez maintenant d'un seul type avec les attributs un-à-plusieurs et vous n'avez besoin que d'une seule clé étrangère pour AttributeList sur les attributs.

+0

Mais cela ne déplacerait-il pas simplement le problème many-foreign-keys vers une table différente (AttributeList au lieu de Attribute)? Je ne suis pas sûr si cela résout vraiment le problème? – Amberite

+0

La différence est que la relation entre par ex. A et l'AttributeList est un-à-un qui à son tour signifie que vous avez la clé étrangère dans A. De même pour B, C, D etc –

+0

Ah, je vois. C'est en fait une bonne solution. Cela introduit une nouvelle classe dans le mix, mais j'aime que la structure de la base de données soit beaucoup plus organisée. Je vais marquer cela comme la réponse. – Amberite

Questions connexes