Entity Data Model : Héritage
Le modèle EDM (Entity Data Model) prend en charge l'héritage pour les types d’entité. L'héritage dans le modèle EDM est semblable à l'héritage pour les classes dans les langages de programmation orientés objet. Comme pour les classes dans les langages orientés objet, vous pouvez définir un type d’entité (type dérivé) qui hérite d’un autre type d’entité (type de base) dans un modèle conceptuel. Toutefois, contrairement aux classes dans la programmation orientée objet, le type dérivé hérite toujours l’ensemble des propriétés et des propriétés de navigation du type de base dans un modèle conceptuel. Vous ne pouvez pas remplacer les propriétés héritées dans un type dérivé.
Dans un modèle conceptuel, vous pouvez générer des hiérarchies d'héritage dans lesquelles un type dérivé hérite d'un autre type dérivé. Le type en haut de la hiérarchie (celui qui n’est pas un type dérivé dans la hiérarchie) est appelé type racine. Dans une hiérarchie d’héritage, la clé d’entité doit être définie sur le type racine.
Vous ne pouvez pas générer de hiérarchies d'héritage dans lesquelles un type dérivé hérite de plusieurs types. Par exemple, dans un modèle conceptuel avec un type d'entité Book
, vous pouvez définir les types dérivés FictionBook
et NonFictionBook
qui héritent de Book
. Toutefois, vous ne pouvez pas ensuite définir un type qui hérite à la fois du type FictionBook
et du type NonFictionBook
.
Exemple
Le diagramme suivant montre un modèle conceptuel avec quatre types d’entités : Book
, FictionBook
, Publisher
et Author
. Le type d'entité FictionBook
est un type dérivé qui hérite du type d'entité Book
. Le type FictionBook
hérite les propriétés ISBN (Key)
, Title
et Revision
, et définit une propriété supplémentaire appelée Genre
.
ADO.NET Entity Framework utilise un langage spécifique à un domaine (DSL), appelé CSDL (Conceptual Schema Definition Language), pour définir des modèles conceptuels. Le CSDL suivant définit un type d'entité, FictionBook
, qui hérite du type Book
(comme dans le diagramme ci-dessus) :
<EntityType Name="FictionBook" BaseType="BooksModel.Book" >
<Property Type="String" Name="Genre" Nullable="false" />
</EntityType>