Правила обработки TypeUsage и задания имен полей хранения ссылок

Если мастер в ассоциации имеет наследников, то на стороне мастера может быть объект любого типа из иерархии наследования. Однако бывают условия, при которых такие ситуации требуется исключить. Для этого во [Flexberry ORM] реализован TypeUsage-атрибут, ограничивающий список типов в иерархии наследования, на который распространяется данная связь.

Обработка TypeUsage

Встроенные в Flexberry Platform сервисы данных (SQLDataService и его наследники) обрабатывают TypeUsage следующим образом:

Если указан TypeUsage для мастерового свойства, этому свойству в структуре данных соответствуют внешние ключи на таблицы, соответствующие указанным в TypeUsage классам.

Имена внешним ключам даются такие: <ИмяРолиМастера>_M<ПорядкНомерВTypeUsage>.«ПорядкНомерВTypeUsage» — начинается с 0.

Таким образом, вышеприведённому примеру соответствует таблица, у которой есть два внешних ключа с именами M_m0 (соответствует M1) и M_m1 (соответствует M2).

Задание имён для полей хранения ссылок

Если есть потребность задать вместо имён M_m0 и M_m1 некоторые мнемонические имена, то необходимо:

  1. Отключить галочку AutoGenerateTypeUsage.
  2. Правильно проставить атрибуты TypeUsage и Storage.

Например, пусть имеется диаграмма вида:

Если ничего не менять в настройках элементов диаграммы, то, например, в таблице ДниПосещения будут внешние ключи с именами Пользователь_m0, Пользователь_m1, Пользователь_m2.

Однако если у связи, соединяющей классы Пользователь и ДниПосещения проставить в TypeUsage и Storage строку вида Пользователь,Врач,Пациент, то в таблице ДниПосещения будут внешние ключи с именами Пользователь, Врач, Пациент. Аналогично можно настроить детейловую связь.