Модель EDM: наследование

Модель данных сущности (EDM) поддерживает наследование для типов сущностей. Наследование в модели (EDM) схоже с наследованием для классов в языках объектно-ориентированного программирования. Как и в классах на объектно-ориентированных языках, в концептуальной модели можно определить тип сущности ( производный тип), наследуемый от другого типа сущности (базовый тип). Однако в отличие от классов в объектно-ориентированном программировании, в концептуальной модели производный тип всегда наследует все свойства и свойства навигации базового типа. В производном типе нельзя отменить унаследованные свойства.

В концептуальной модели можно построить иерархию наследования, в которой один производный тип наследует свойства другого производного типа. Тип в верхней части иерархии (один тип в иерархии, который не является производным типом), называется корневым типом. В иерархии наследования ключ сущности должен быть определен для корневого типа.

Нельзя построить иерархии наследования, в которых один производный тип наследует свойства более чем одного типа. Например, в концептуальной модели с типом сущности Book можно определить производные типы FictionBook и NonFictionBook, из которых каждый наследует свойства Book. Тем не менее, в дальнейшем нельзя определить тип, который бы наследовал свойства обоих типов FictionBook и NonFictionBook.

Пример

На следующей схеме показана концептуальная модель с четырьмя типами сущностей: Book, , FictionBookPublisherи Author. Тип сущности FictionBook является производным типом, который наследует свойства от типа сущности Book. Тип FictionBook наследует свойства ISBN (Key), Title и Revision, а также определяет дополнительное свойство Genre.

Diagram that shows a conceptual model with four entity types.

В ADO.NET Entity Framework используется язык, зависящий от домена (DSL), называемый языком определения концептуальной схемы (CSDL) для определения концептуальных моделей. Далее язык CSDL определяет тип сущности, FictionBook, который наследует свойства типа Book (как показано на схеме выше).

<EntityType Name="FictionBook" BaseType="BooksModel.Book" >
  <Property Type="String" Name="Genre" Nullable="false" />
</EntityType>

См. также