Если мастер в ассоциации имеет наследников, то на стороне мастера может быть объект любого типа из иерархии наследования. Однако бывают условия, при которых такие ситуации требуется исключить. Для этого во [Flexberry ORM] реализован TypeUsage
-атрибут, ограничивающий список типов в иерархии наследования, на который распространяется данная связь.
Обработка TypeUsage
Встроенные в Flexberry Platform
сервисы данных (SQLDataService и его наследники) обрабатывают TypeUsage
следующим образом:
Если указан TypeUsage
для мастерового свойства, этому свойству в структуре данных соответствуют внешние ключи на таблицы, соответствующие указанным в TypeUsage
классам.
Имена внешним ключам даются такие: <ИмяРолиМастера>_M<ПорядкНомерВTypeUsage>.«ПорядкНомерВTypeUsage»
— начинается с 0.
Таким образом, вышеприведённому примеру соответствует таблица, у которой есть два внешних ключа с именами M_m0
(соответствует M1) и M_m1
(соответствует M2).
Задание имён для полей хранения ссылок
Если есть потребность задать вместо имён M_m0
и M_m1
некоторые мнемонические имена, то необходимо:
- Отключить галочку AutoGenerateTypeUsage.
- Правильно проставить атрибуты TypeUsage и Storage.
Например, пусть имеется диаграмма вида:
Если ничего не менять в настройках элементов диаграммы, то, например, в таблице ДниПосещения
будут внешние ключи с именами Пользователь_m0
, Пользователь_m1
, Пользователь_m2
.
Однако если у связи, соединяющей классы Пользователь
и ДниПосещения
проставить в TypeUsage
и Storage
строку вида Пользователь,Врач,Пациент
, то в таблице ДниПосещения
будут внешние ключи с именами Пользователь
, Врач
, Пациент
. Аналогично можно настроить детейловую связь.