Model danych jednostki: Dziedziczenie
Model danych jednostki (EDM) obsługuje dziedziczenie typów jednostek. Dziedziczenie w programie EDM jest podobne do dziedziczenia klas w językach programowania zorientowanych na obiekty. Podobnie jak w przypadku klas w językach obiektowych, w modelu koncepcyjnym można zdefiniować typ jednostki (typ pochodny), który dziedziczy z innego typu jednostki (typu podstawowego). Jednak w przeciwieństwie do klas w programowaniu obiektowym w modelu koncepcyjnym typ pochodny zawsze dziedziczy wszystkie właściwości i właściwości nawigacji typu podstawowego. Nie można zastąpić właściwości dziedziczone w typie pochodnym.
W modelu koncepcyjnym można tworzyć hierarchie dziedziczenia, w których typ pochodny dziedziczy z innego typu pochodnego. Typ w górnej części hierarchii (jeden typ w hierarchii, który nie jest typem pochodnym) jest nazywany typem głównym. W hierarchii dziedziczenia klucz jednostki musi być zdefiniowany w typie głównym.
Nie można tworzyć hierarchii dziedziczenia, w których typ pochodny dziedziczy z więcej niż jednego typu. Na przykład w modelu koncepcyjnym z typem Book
jednostki można zdefiniować typy FictionBook
pochodne, a NonFictionBook
każdy z nich dziedziczy z Book
klasy . Nie można jednak zdefiniować typu dziedziczonego zarówno z typów , jak FictionBook
i NonFictionBook
.
Przykład
Na poniższym diagramie przedstawiono model koncepcyjny z czterema typami jednostek: Book
, , FictionBook
Publisher
i Author
. Typ FictionBook
jednostki jest typem pochodnym dziedziczącym z Book
typu jednostki. Typ FictionBook
dziedziczy ISBN (Key)
właściwości , Title
i Revision
i definiuje dodatkową właściwość o nazwie Genre
.
ADO.NET Entity Framework używa języka specyficznego dla domeny (DSL) nazywanego koncepcyjnym językiem definicji schematu (CSDL) do definiowania modeli koncepcyjnych. Poniższy plik CSDL definiuje typ jednostki , FictionBook
który dziedziczy z Book
typu (jak na powyższym diagramie):
<EntityType Name="FictionBook" BaseType="BooksModel.Book" >
<Property Type="String" Name="Genre" Nullable="false" />
</EntityType>