Entiteitsgegevensmodel: overname
Het EDM (Entity Data Model) ondersteunt overname voor entiteitstypen. Overname in de EDM is vergelijkbaar met overname voor klassen in objectgeoriënteerde programmeertalen. Net als bij klassen in objectgeoriënteerde talen kunt u in een conceptueel model een entiteitstype (een afgeleid type) definiëren dat overgaat van een ander entiteitstype (het basistype). In tegenstelling tot klassen in objectgeoriënteerde programmering, neemt het afgeleide type in een conceptueel model echter altijd alle eigenschappen en navigatie-eigenschappen van het basistype over. U kunt overgenomen eigenschappen in een afgeleid type niet overschrijven.
In een conceptueel model kunt u overnamehiërarchieën bouwen waarin een afgeleid type wordt overgenomen van een ander afgeleid type. Het type boven aan de hiërarchie (het ene type in de hiërarchie dat geen afgeleid type is) wordt het hoofdtype genoemd. In een overnamehiërarchie moet de entiteitssleutel worden gedefinieerd voor het hoofdtype.
U kunt geen overnamehiërarchieën bouwen waarin een afgeleid type wordt overgenomen van meer dan één type. In een conceptueel model met een Book
entiteitstype kunt u bijvoorbeeld afgeleide typen FictionBook
definiëren en NonFictionBook
allemaal overnemen van Book
. U kunt echter geen type definiëren dat wordt overgenomen van zowel de als NonFictionBook
de FictionBook
typen.
Opmerking
In het volgende diagram ziet u een conceptueel model met vier entiteitstypen: Book
, FictionBook
, Publisher
en Author
. Het FictionBook
entiteitstype is een afgeleid type dat wordt overgenomen van het Book
entiteitstype. Het FictionBook
type neemt de , Title
en eigenschappen over Revision
en definieert een extra eigenschap met de ISBN (Key)
naam Genre
.
De ADO.NET Entity Framework maakt gebruik van een domeinspecifieke taal (DSL) genaamd conceptuele schemadefinitietaal (CSDL) om conceptuele modellen te definiëren. De volgende CSDL definieert een entiteitstype, FictionBook
dat overgaat van het Book
type (zoals in het bovenstaande diagram):
<EntityType Name="FictionBook" BaseType="BooksModel.Book" >
<Property Type="String" Name="Genre" Nullable="false" />
</EntityType>