Поделиться через


Модель данных сущности: наследование

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

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

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

Пример

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

Схема с концептуальной моделью с четырьмя типами сущностей.

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

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

См. также