Entitásadat-modell: Öröklés
Az entitásadat-modell (EDM) támogatja az entitástípusok öröklését. Az EDM öröklése hasonló az objektumorientált programozási nyelvek osztályainak örökléséhez. Az objektumorientált nyelvek osztályaihoz hasonlóan egy elméleti modellben is definiálhat egy entitástípust (származtatott típust), amely egy másik entitástípustól (az alaptípustól) öröklődik. Az objektumorientált programozás osztályaitól eltérően azonban egy elméleti modellben a származtatott típus mindig örökli az alaptípus összes tulajdonságát és navigációs tulajdonságát . Származtatott típusban nem bírálhatja felül az örökölt tulajdonságokat.
Egy elméleti modellben olyan öröklési hierarchiákat hozhat létre, amelyekben egy származtatott típus egy másik származtatott típustól öröklődik. A hierarchia tetején lévő típust (a hierarchia egy olyan típusát, amely nem származtatott típus) gyökértípusnak nevezzük. Öröklési hierarchiában az entitáskulcsot a gyökértípuson kell meghatározni.
Nem hozhat létre olyan öröklési hierarchiákat, amelyekben egy származtatott típus egynél több típustól örököl. Például egy entitástípussal rendelkező Book
fogalmi modellben definiálhat származtatott típusokat FictionBook
, és NonFictionBook
amelyektől Book
mindegyik öröklődik. Nem definiálhat azonban olyan típust, amely örökli mind a típusokat, mind a FictionBook
NonFictionBook
típusokat.
Példa
Az alábbi ábrán egy négy entitástípussal rendelkező fogalmi modell látható: Book
, FictionBook
, Publisher
és Author
. Az FictionBook
entitástípus egy származtatott típus, amely az Book
entitástípustól öröklődik. A FictionBook
típus örökli a ISBN (Key)
, Title
és Revision
a tulajdonságokat, és definiál egy további, úgynevezett tulajdonságot Genre
.
A ADO.NET Entity Framework egy tartományspecifikus nyelvet (DSL) használ, amelyet fogalmi sémadefiníciós nyelvnek (CSDL) hívunk a fogalmi modellek meghatározásához. A következő CSDL egy olyan entitástípust határoz meg, FictionBook
amely a Book
típustól öröklődik (a fenti ábrához hasonlóan):
<EntityType Name="FictionBook" BaseType="BooksModel.Book" >
<Property Type="String" Name="Genre" Nullable="false" />
</EntityType>