Обзор ADO.NET Entity Framework - Определение наследования

ОГЛАВЛЕНИЕ

Определение наследования

EDM также поддерживает модели, не соответствующие базе данных взаимно-однозначно. Например, используя базу данных Northwind, вы можете создать класс, называющийся DiscontinuedProducts, который наследует все свойства класса Products, но содержит только продукты, значение поля Discontinued для которых равно 1. (Отметьте, что класс DiscontinuedProducts мог бы также иметь дополнительные свойства). Это упрощенная схема наследования, но она показывает, как применить наследование в EDM.

Первым шагом по созданию класса DiscontinuedProducts в концептуальной модели является открытие файла CSDL, создание нового типа EntityType, называющегося DiscontinuedProducts, и установка его атрибута BaseType в значение NorthwindModel.Products (схема и название базового EntityType). Порожденный тип EntityType наследует свойства EntityType Products, включая ключи. Поэтому я не указываю атрибут Key и свойства для произведенного EntityType. Я также убираю свойство Discontinued из EntityType Products. Дополнительный код CSDL для всего описанного выглядит так:

<EntityType Name=”DiscontinuedProducts” 
  BaseType=”NorthwindModel.Products”/>

Следующим шагом в этом процессе является открытие файла MSL и удаление атрибутов TypeName и TableName элемента EntitySetMapping Products. Теперь они будут устанавливаться отдельно для каждого конкретного типа EntityType. Затем необходимо создать дочерний элемент EntityTypeMapping и установить TypeName как NorthwindModel.Products. Для каждого EntityType, порожденного от базового EntityType, EntitySetMapping должен включать элемент EntityTypeMapping. Далее нужно создать дочерний элемент EntityTypeMapping, называющийся TableMappingFragment, и установить для его атрибута TableName значение Products. В целом, эти шаги переносят сопоставление с элемента EntitySetMapping на более низкий и детальный уровень.

Закомментируйте сопоставление свойства Discontinued и добавьте элемент Condition, указывающий, что включены будут только записи со значением поля Discontinued, равным 0. Скопируйте целиком XML фрагмент EntityTypeMapping, поменяйте значение атрибута Name на DiscontinuedProducts и поменяйте значение в условии на 1. Новый фрагмент файла MSL приведен на Рис. 6.