Пошаговое руководство. Сопоставление наследования "одна таблица на иерархию" в платформе динамических данных

В данном пошаговом руководстве показана реализация наследования "одна таблица на иерархию" путем изменения концептуальной модели в модели EDM. Модель наследования "одна таблица на иерархию" будет использоваться в проекте платформы динамических данных Entity Framework.

Наследование "одна таблица на иерархию" использует одну таблицу базы данных для обработки данных для всех типов сущности в иерархии наследования. Это также называется наследованием с одной таблицей. Дополнительные сведения о реализации наследования в модели EDM см. в разделе Inheritance. Дополнительные сведения об использовании наследования в платформе динамических данных см. в разделе Инфраструктура платформы динамических данных ASP.NET.

В этом пошаговом руководстве наследование "одна таблица на иерархию" реализуется путем изменения модели EDM, созданной из образца базы данных School. В модели EDM образца базы данных School тип сущности Person имеет два свойства — HireDate и EnrollmentDate. Эти свойства могут относиться к новым типам сущности (Instructor и Student), которые наследуются от Person.

В данном пошаговом руководстве наследование "одна таблица на иерархию" реализуется путем выполнения следующих действий.

  1. Создание двух новых типов сущностей, производных от Person.

  2. Перемещение свойств, определенных для каждого подтипа, из сущности Person в сущность подтипа.

  3. Задание ограничений для свойств подтипов.

  4. Преобразование типа сущности Person в абстрактный тип.

  5. Сопоставление каждого подтипа сущности таблице Person и определение условия для поля подтипа.

Для выполнения этого пошагового руководства потребуется следующее.

  • Microsoft Visual Studio 2010 или более поздняя версия.

  • Образец базы данных School. Версию этой базы данных для Microsoft SQL Server 2008 можно загрузить с сайта CodePlex или создать с помощью операторов Transact-SQL. Дополнительные сведения см. в разделе Creating the School Sample Database.

  • Веб-сайт с сущностями платформы динамических данных, который использует образец базы данных School. В этом пошаговом руководстве предполагается, что в качестве имени файла модели EDM ADO.NET используется имя School.edmx.

В этом пошаговом руководстве также предполагается, что вы имеете представление о платформе динамических данных ASP.NET. Дополнительные сведения см. в разделе Общие сведения о платформе динамических данных ASP.NET.

Проект Visual Studio, содержащий исходный код для данного раздела, доступен на следующей странице: Dynamic Data Entity Framework. Видео, демонстрирующее добавление новых сущностей, доступно на следующей странице: Mapping Table per Hierarchy Inheritance.

Для начала измените концептуальную часть модели EDM SchoolModel, чтобы реализовать наследование "одна таблица на иерархию". Добавьте две сущности: Student и Instructor. Обе сущности являются производными от сущности Person. Уникальные свойства сущности Student перемещаются из сущности Person в сущность Student. Уникальные свойства сущности Instructor, перемещаются из сущности Person в сущность Instructor. Сущность Person будет содержать свойства, совместно используемые обеими унаследованными сущностями.

Добавление новых сущностей

  1. Откройте веб-проект на платформе динамических данных, использующий образец базы данных School и включающий в себя файл School.edmx как файл модели EDM ADO.NET.

    Дополнительные сведения см. в подразделе Необходимые компоненты в начале данного раздела.

  2. В обозревателе решений дважды щелкните файл School.edmx.

    Файл School.edmx откроется в Конструкторе моделей EDM ADO.NET (конструктор сущностей).

  3. Щелкните правой кнопкой мыши пустой участок рабочей области конструирования в конструкторе сущностей, выберите команду Добавить и щелкните Сущность.

    Откроется диалоговое окно Добавление сущности. Ниже показано окно пользовательского интерфейса, используемое для добавления сущностей.

    Щелкните правой кнопкой мыши в пустом месте области конструктора

    Ниже показано диалоговое окно Добавление сущности.

    Добавление сущности
  4. В поле Имя сущности введите Instructor.

  5. Из списка Базовый тип выберите Person.

  6. Нажмите кнопку ОК.

    Ниже показан новый тип сущности, созданный и отображенный в рабочей области конструирования.

    Сущность инструктора
  7. Повторите предыдущие шаги, но в поле Имя сущности введите Student.

    В рабочей области конструирования отобразятся два новых типа сущностей — Instructor и Student. Стрелки указывают в направлении от новых типов сущностей к типу сущности Person. Это означает, что Person — базовый тип для новых типов сущностей.

  8. В конструкторе сущностей в разделе Скалярные свойства щелкните правой кнопкой мыши свойство HireDate типа сущности Person и выберите команду Вырезать.

  9. В конструкторе сущностей щелкните правой кнопкой мыши раздел Скалярные свойства для типа сущности Instructor и выберите команду Вставить.

  10. Щелкните правой кнопкой мыши свойство HireDate и выберите пункт Свойства.

  11. В окне Свойства установите для свойства Nullable значение false.

  12. Повторите последние четыре шага, но при этом вырежьте свойство EnrollmentDate типа сущности Person и вставьте его в тип сущности Student.

  13. Выберите тип сущности Person.

  14. В окне Свойства присвойте свойству Abstract значение Persontrue.

    Появится сообщение, уведомляющее о том, что при задании для типа сущности абстрактного типа все существующие сопоставления функций для данного типа сущности будут удалены.

  15. Нажмите кнопку ОК.

    ПримечаниеПримечание

    Для моделирования сценариев "одна таблица на иерархию" использование абстрактных типов не требуется. В этом примере абстрактные типы используются для демонстрации их использования в моделях EDM.

Теперь сопоставьте сущности Instructor и Student сущности Person. Инструкторы принимаются на работу, но не регистрируются. Учащиеся не принимаются на работу, но регистрируются. Для различения сущностей Instructor и Student в платформе Entity Framework используются дата приема на работу и дата регистрации.

Сопоставление сущностей Instructor и Student

  1. Если окно Сведения о сопоставлении еще не открыто, щелкните правой кнопкой мыши рабочую область конструирования и выберите пункт Сведения о сопоставлении.

  2. Выберите тип сущности Instructor и в окне Сведения о сопоставлении щелкните <Добавить таблицу или представление>.

    Ниже показано диалоговое окно Сведения о сопоставлении — Инструктор.

    Выберите тип сущности инструктора и щелкните <Add>

    Поле <Добавить таблицу или представление> станет списком таблиц, с которыми можно сопоставить выбранную сущность.

  3. В списке выберите элемент Person.

    Окно Сведения о сопоставлении обновится и отобразит сопоставления столбцов по умолчанию и параметр для добавления условия.

  4. Щелкните <Добавить условие>.

    Поле <Добавить условие> станет списком столбцов, для которых можно задать условия.

  5. Выберите из списка пункт HireDate.

  6. В столбце Оператор окна Сведения о сопоставлении выберите в списке значение Является.

  7. В столбце Свойство/значение выберите пункт Не NULL.

    ПримечаниеПримечание

    Свойства сущности можно использовать только со сравнением равно NULL или не равно NULL. Их нельзя использовать в сравнениях равенства (=).

    Ниже приведено полностью настроенное сопоставление.

    Завершенные сведения о сопоставлении
  8. Повторите последние шаги для типа сущности Student, но выберите свойство EnrollmenDate и условие EnrollmentDate не NULL.

    Теперь наследование типа "одна таблица на иерархию" успешно реализовано.

    На следующей иллюстрации показано наследование табличной иерархии для созданных сущностей.

    Отображение иерархии таблиц
  9. Сохраните и закройте файл School.edmx.

Теперь можно проверить работу только что созданного веб-узла на платформе динамических данных.

Тестирование производных таблиц

  1. В Обозревателе решений щелкните правой кнопкой мыши страницу Default.aspx, после чего выберите команду Просмотр в обозревателе.

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

  2. Выберите таблицу учащихся или таблицу инструкторов.

    Появится страница, содержащая данные из выбранной таблицы. В таблице учащихся нет столбца Hired и в каждой строке указана дата регистрации. В таблице инструкторов нет столбца Enrolled и в каждой строке указана дата приема на работу.

  3. Закройте браузер.

В данном пошаговом руководстве было реализовано наследование типа "одна таблица на иерархию" в модели EDM и его результаты были отображены на веб-сайте с сущностями платформы динамических данных. Дополнительные сведения о задании модели EDM с наследованием типа "одна таблица на иерархию" см. в разделе How to: Define a Model with Table-per-Hierarchy Inheritance. Дополнительные сведения о реализации наследования в модели EDM см. в разделе Inheritance (EDM).

Показ: