Как настроить наследование с использованием реляционного конструктора объектов
Реляционный конструктор объектов (Реляционный конструктор объектов) поддерживает концепцию наследования одиночных таблиц, так как именно она обычно осуществляется в реляционных системах. При однотабличном наследовании имеется единственная таблица базы данных, которая содержит поля как для родительских данных, так и для дочерних. Для реляционных данных столбец дискриминатора содержит значение, которое определяет, какому классу принадлежит каждая запись.
Например, рассмотрим таблицу Persons, которая содержит данные всех сотрудников компании. Некоторые лица являются служащими, а некоторые — менеджерами. Таблица Persons содержит столбец с именем EmployeeType, который имеет значение 1 для менеджеров и значение 2 для служащих; это — столбец дискриминатора. В этом случае можно создать подкласс служащих и заполнить класс только записями, которые имеют в столбце EmployeeType значение 2. Кроме того, можно удалить из каждого класса неприменимые столбцы.
Создание модели объекта, который использует наследование (и соответствует реляционным данным), может быть несколько запутанным. В следующей процедуре описываются действия, необходимые для настройки наследования при помощи реляционного конструктора объектов. Выполнение этих универсальных действий без обращения к существующей таблице и столбцам может оказаться затруднительным, поэтому предоставляется пошаговое руководство, которое использует реальные данные. Подробные пошаговые инструкции по настройке наследования с помощью Реляционный конструктор объектов см. в разделе Пошаговое руководство. Создание классов LINQ to SQL с помощью однотабличного наследования (реляционный конструктор объектов).
Чтобы создать наследуемые классы данных
Откройте Реляционный конструктор объектов путем добавления элемента LINQ to SQL Classes в существующий проект на Visual Basic или C#.
Перетащите таблицу, которую вы хотите использовать как базовый класс, на Реляционный конструктор объектов.
Перетащите второй экземпляр таблицы на Реляционный конструктор объектов и переименуйте ее. Это производный класс или подкласс.
Щелкните по Наследование на вкладке Реляционный конструктор объектов Панели элементов, после чего щелкните по подклассу (по таблице, которую вы переименовали) и подключите его к базовому классу.
Примечание
Щелкните элемент Наследование в области элементов и, отпустив кнопку мыши, щелкните второй экземпляр класса, созданный на шаге 3, а затем щелкните первый класс, созданный на шаге 2.Стрелка на линии наследования укажет на первый класс.
Удалите в каждом классе свойства объектов, которые не должны выводиться и не используются для ассоциаций. Если попробовать удалить свойства объекта, используемые для ассоциаций, будет выдано сообщение об ошибке: Нельзя удалить свойство <имя свойства>, поскольку оно участвует в ассоциации <имя ассоциации>.
Примечание
Поскольку производный класс наследует свойства, определенные в своем базовом классе, нельзя определить в каждом классе одинаковые столбцы.(Столбцы внедряются как свойства.) Можно разрешить создание столбцов в производном классе, устанавливая Модификатор наследования на свойство в базовом классе.Дополнительные сведения см. в разделе Overriding Properties and Methods.
Выберите линию наследования в конструкторе Реляционный конструктор объектов.
В окне Свойства задайте в Свойстве дискриминатора имя столбца, который используется для различения записей в классах.
Задайте в свойстве Значение производного класса дискриминатора значение в базе данных, которое обозначает запись в качестве наследуемого типа. (Это значение хранится в столбце дискриминатора и используется для обозначения наследуемого класса.)
Задайте в свойстве Дискриминатор базового класса значение, которое обозначает запись в качестве базового типа. (Это значение хранится в столбце дискриминатора и используется для обозначения базового класса.)
Дополнительно можно установить свойство Наследование по умолчанию, чтобы обозначить тип в иерархии наследования, который используется при загрузке строк, которые не соответствуют какому-либо определенному коду наследования. Другими словами, если запись имеет в столбце дискриминатора значение, которое не соответствует значению ни в свойстве Значение производного класса дискриминатора, ни в свойстве Дискриминатор базового класса, то запись будет загружена в тип, обозначенный как Наследование по умолчанию.
См. также
Задачи
Пошаговое руководство. Создание классов LINQ to SQL (реляционный конструктор объектов)
Ссылки
Наследование (Руководство по программированию на C#)
Основные понятия
Общие сведения о реляционном конструкторе объектов
Новые возможности разработки приложений для работы с данными