Clés de base de données composites avec Entity Framework 4.0

composite-key entity-framework primary-key

Question

La nouvelle conception d'une base de données volumineuse de notre société utilise largement les clés primaires composites de la base de données.

Si vous oubliez les conséquences sur les performances, cela posera-t-il des difficultés lors de l'utilisation de cette base de données dans Entity Framework 4.0? Il est peu probable que la structure de la base de données change et je ne cherche pas un débat "philosophique", mais quels sont les impacts pratiques?

Selon Jeremy Miller , "Les clés composites rendent plus difficile tout type de mappage objet / relationnel et la persistance en général". mais il ne dit pas vraiment pourquoi. Cela correspond-il à la manière dont Entity Framework 4.0 traite les clés?

Réponse acceptée

Non, EF4 supporte parfaitement les clés 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 clé sur chaque modèle; cette clé peut avoir plusieurs champs, mais vous ne pouvez en avoir qu'un du point de vue du concepteur. Pas sûr de pouvoir éditer manuellement le mappage XML ou uniquement le code.

Vous pouvez définir un champ comme identité et non comme 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 interrogeable parfaitement.


Réponse populaire

J'ai eu des problèmes avec EF4 et les clés 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 ma question précédente Mappage de clés étrangères composites dans une relation multiple dans Entity Framework pour plus de détails. Le problème est que lorsque vous avez une table de jointure (décrivant une relation plusieurs-beaucoup) où les deux relations utilisent une clé commune, vous obtenez une erreur telle que

Erreur 3021: Problème dans les fragments de mappage ...: Chacune des colonnes suivantes du tableau PageView est mappée à plusieurs propriétés conceptuelles latérales: PageView.Version est mappé à (PageView_Association.View.Version, PageView_Association.Page.Version)

La seule solution consiste à dupliquer la colonne, ce qui va à l’encontre de son objectif.

Bonne chance!



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow