2009-12-18 5 views
12

La nouvelle conception d'une grande base de données dans notre société fait un usage intensif des clés primaires composites sur la base de données. Oublier les impacts sur les performances, cela posera-t-il des problèmes lors de l'utilisation de cette base de données dans Entity Framework 4.0? La structure de la base de données est peu susceptible de changer et je ne cherche pas de débat "philosophique" mais quels sont les impacts pratiques?Clés DB composites avec Entity Framework 4.0

Selon Jeremy Miller, "Clé composite rend tout type de mappage objet/relationnel et la persistance en général plus difficile." mais il ne dit pas vraiment pourquoi. Est-ce lié à la façon dont Entity Framework 4.0 gère les clés?

Répondre

13

Non, EF4 prend très bien en charge les touches composites.

Le problème est une table avec une clé de substitution et des clés composites. Vous ne pouvez définir qu'une seule touche sur chaque modèle. cette clé peut avoir plusieurs champs, mais vous ne pouvez en avoir qu'un du point de vue du concepteur. Vous ne savez pas comment modifier manuellement le mappage XML ou le code uniquement.

Vous pouvez définir un champ en tant qu'identité et non en tant que clé si vous avez besoin d'une clé composite et d'une clé de substitution sur la même table. Le champ Identity (Id) ne sera pas utilisé par ObjectContext ou ObjectStateTracker, mais sera incrémenté et sera très bien interrogeable.

8

J'ai eu des problèmes avec les touches EF4 et composites. Il ne prend pas en charge les colonnes utilisées en tant que composants dans plusieurs clés d'une table de jointure. Voir la question précédente Mapping composite foreign keys in a many-many relationship in Entity Framework pour plus de détails. Les noix de c'est que lorsque vous avez une table de jointure (décrivant plusieurs-plusieurs) où les deux relations utilisent une clé commune, vous obtiendrez une erreur comme

Erreur 3021: Problème dans la cartographie fragments ...: Chacune des colonnes suivantes du tableau PageView est mappé à multiples propriétés secondaires conceptuelles: PageView.Version est mis en correspondance avec (PageView_Association.View.Version, PageView_Association.Page.Version)

Le seul moyen de contourner était de dupliquer la colonne qui défait le but de l'avoir là du tout.

Bonne chance!

+6

Ridiculement agaçant. –

Questions connexes