Настройка наследования с использованием реляционного конструктора объектов

Реляционный конструктор объектов (конструктор O/R) поддерживает концепцию наследования одной таблицы, так как она часто реализуется в реляционных системах. При однотабличном наследовании имеется единственная таблица базы данных, которая содержит поля как для родительских данных, так и для дочерних. Для реляционных данных столбец дискриминатора содержит значение, которое определяет, какому классу принадлежит каждая запись.

Например, рассмотрим таблицу Persons , содержащую всех сотрудников компании. Некоторые лица являются служащими, а некоторые - менеджерами. Таблица содержит столбец с именем EmployeeType 1 для руководителей и значение 2 для сотрудников. Это Persons столбец дискриминатора. В этом случае можно создать подкласс служащих и заполнить класс только записями, которые имеют в столбце EmployeeType значение 2. Кроме того, можно удалить из каждого класса неприменимые столбцы.

Создание модели объекта, который использует наследование (и соответствует реляционным данным), может быть несколько запутанным. В следующей процедуре описываются действия, необходимые для настройки наследования при помощи реляционного конструктора объектов. Выполнение универсальных действий без ссылки на существующую таблицу и столбцы может оказаться трудным, поэтому предоставляется пошаговое руководство, в котором используются данные. Подробные пошаговые инструкции по настройке наследования с помощью реляционный конструктор объектов, см. в разделе Пошаговое руководство: Создание LINQ to SQL классы с помощью однотабличного наследования (реляционный конструктор объектов).

Чтобы создать наследуемые классы данных

  1. Откройте конструктор O/R, добавив элемент класса LINQ to SQL в существующий проект Visual Basic или C#.

  2. Перетащите таблицу, которую вы хотите использовать в качестве базового класса, в конструктор O/R.

  3. Перетащите вторую копию таблицы в конструктор O/R и переименуйте ее. Это производный класс или подкласс.

  4. Щелкните Наследование на вкладке Реляционный конструктор объектов на Панели элементов, после чего щелкните по подклассу (по таблице, которую вы переименовали) и подключите его к базовому классу.

    Примечание.

    Щелкните элемент Наследование на Панели элементов и, отпустив кнопку мыши, щелкните второй экземпляр класса, созданный на шаге 3, а затем щелкните первый класс, созданный на шаге 2. Стрелка на линии наследования указывает на первый класс.

  5. Удалите в каждом классе свойства объектов, которые не должны выводиться и не используются для ассоциаций. При попытке удалить свойства объекта, используемые для сопоставлений, The property <property name> cannot be deleted because it is participating in the association <association name>возникает ошибка.

    Примечание.

    Поскольку производный класс наследует свойства, определенные в своем базовом классе, нельзя определить в каждом классе одинаковые столбцы. (Столбцы реализуются как свойства.) Вы можете включить создание столбцов в производном классе, задав модификатор наследования для свойства в базовом классе. Дополнительные сведения см. в разделе "Основы наследования" (Visual Basic).

  6. Выберите строку наследования в конструкторе O/R.

  7. В окне свойств задайте для свойства имя столбца, которое различает записи в классах.

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

  9. Задайте в свойстве Дискриминатор базового класса значение, которое обозначает запись в качестве базового типа. (Это значение, хранящееся в столбце дискриминатора и используемое для обозначения базового класса.)

  10. Дополнительно можно установить свойство Наследование по умолчанию, чтобы обозначить тип в иерархии наследования, который используется при загрузке строк, которые не соответствуют какому-либо определенному коду наследования. Другими словами, если запись имеет значение в своем столбце дискриминационных значений, которые не соответствуют значению в свойствах производного класса дискриминационных значений или базового класса, запись загружается в тип, указанный в качестве значения по умолчанию наследования.