Qu'est ce qu'un type complexe dans le cadre de l'entité et quand l'utiliser?
J'ai essayé de lire le msdn l'article sur des types complexes. Mais il n'explique pas quand l'utiliser. Aussi il n'y a pas une explication complète sur le web sur des types complexes et quand les utiliser.
- Le suivant fournit plus de détails, bien que ne pas répondre directement à votre question - Associations en EF Premier Code: Partie 2 – les Types Complexes
- merci je vais regarder
Vous devez vous connecter pour publier un commentaire.
La longue explication est dans l'article MSDN vous lié... donc en gros, vous voulez une explication facile:
Un type complexe est un ensemble de propriétés qui existent dans son propre objet en C#, mais sont mappés à des colonnes dans un tableau (l'une pour l'entité qui le contient), au lieu d'avoir sa propre table (qui aurait besoin d'une clé, etc.).
Imaginez que vous voulez de cette table dans la base de données:
Mais veulent cette structure dans le C# entités:
Donc il y
Address
serait un type complexe: il n'existerait pas sur son propre (il n'y aurait pasAddresses
table) sur la base de données... il n'existe que comme un ensemble de colonnes sur laOrders
table.Comme le fait remarquer @HenkHolterman dans les commentaires, la valeur de l'avoir des types complexes est d'avoir une seule C# entité qui peut être utilisé comme une valeur pour d'autres contenant des entités (dans mon exemple, vous pourriez avoir une
Address
dans unSupplier
entité, par exemple, mais il va juste être mappé sur un ensemble de colonnes dans laSuppliers
tableau). Il le rend facile à travailler avec les valeurs de type complexe.L'inconvénient, c'est précisément celle-là: vous pourriez avoir à répéter le type complexe valeurs à de nombreuses reprises dans la base de données s'il arrive qu'un même
Address
(ou tout autre type d'utilisation) peuvent être partagés entre les différentes entités.Si vous choisissez de travailler avec des types complexes ou des entités séparées est à vous et à votre conception.
Considérer cette
ContactDetails
classe par exemple:Par défaut, EF traiter
ContactDetails
comme un Entité. Cela signifie que si (par exemple), vous avez unePerson
classe avec une navigation à la propriété deContactDetails
type, EF carte de laPerson.ContactDetails
relation à une autre table (parce que Entité est quelque chose qui est d'avoir un identité de son propre, donc d'autres entités peuvent se référer à elle - et qui requièrent une table différente en termes relationnels).En notant
ContactDetails
comme un de Type Complexe au lieu de cela, EF ne sera plus la traiter comme une entité qui nécessite une relation et au lieu de l'associer à la même table de la société mère (contenant) entité (Person
dans mon exemple), rendant de ce fait un La Valeur De L'Objet.