Модель EDM: наследование
Модель EDM поддерживает наследование для типов сущности. Наследование в модели (EDM) схоже с наследованием для классов в языках объектно-ориентированного программирования. Как и в случае с классами в языках объектно-ориентированного программирования, в концептуальной модели можно определить тип сущности ( производный тип), который наследует свойства другого типа сущности (базовый тип). Тем не менее, в отличие от классов в объектно-ориентированном программировании, в концептуальной модели производный тип всегда наследует все свойства и свойства навигации базового типа. В производном типе нельзя отменить унаследованные свойства.
В концептуальной модели можно построить иерархию наследования, в которой один производный тип наследует свойства другого производного типа. Тип наверху иерархии (тип в иерархии, который не является производным типом) называется корневым типом. В иерархии наследования ключ сущности должен быть определен в корневом типе.
Нельзя построить иерархии наследования, в которых один производный тип наследует свойства более чем одного типа. Например, в концептуальной модели с типом сущности Book можно определить производные типы FictionBook и NonFictionBook, из которых каждый наследует свойства Book. Тем не менее, в дальнейшем нельзя определить тип, который бы наследовал свойства обоих типов FictionBook и NonFictionBook.
Пример
На приведенной ниже схеме показана концептуальная модель с четырьмя типами сущностей: Book, FictionBook, Publisher и Author. Тип сущности FictionBook является производным типом, который наследует свойства от типа сущности Book. Тип FictionBook наследует свойства ISBN (Key), Title и Revision, а также определяет дополнительное свойство Genre.
Платформа ADO.NET Entity Framework использует доменный язык DSL, называемый языком CSDL (CSDL), для определения концептуальных моделей. Далее язык CSDL определяет тип сущности, FictionBook, который наследует свойства типа Book (как показано на схеме выше).
<EntityType Name="FictionBook" BaseType="BooksModel.Book" >
<Property Type="String" Name="Genre" Nullable="false" />
</EntityType>