Интерфейс UnityEF.ICollection используется для отметки класса, который реализует коллекцию и связь один ко многим при объектно-реляционном маппинге. Они перечислены в таблице:
| Коллекция | Описание |
|---|---|
| GDictionary |
Глобальный словарь. V должен быть классом. |
| LDictionary |
Локальный словарь. V должен быть классом. |
| LDictionary_ |
Локальный словарь для простых типов. |
| GList |
|
| LList |
Локальный список. T должен быть классом. |
| LList_ |
Локальный список для простых типов. |
| LQueue |
Локальная очередь. T должен быть классом. |
| LQueue_ |
Локальная очередь для простых типов. |
Все эти классы поддерживают некоторое общие поведение: * При отсутствии модели, реализуют хранение в памяти, соответствующими стандартными реализациями (Dictionary, List, Queue) * __
Разделение на глобальные и локальные коллекции (списки)
- Глобальный список/словарь отображается на всю таблицу в базе данных (БД). Содержит все записи класса (сущности) V из соответствующей таблицы без привязки к какому-либо родительскому объекту.
- Такие коллекции типичны для корневых агрегатов (например, Society может содержать глобальные списки всех агентов, всех зданий и т.д.).
- Если в иерархии наследования есть базовый класс (например, Building) и наследники (Residential, Company), глобальный словарь может быть построен для базового класса и будет включать все записи всех наследников (полиморфная выборка). В то же время можно создать отдельные глобальные словари для каждого конкретного типа наследника — тогда каждый из них будет содержать только записи соответствующего подтипа (и его наследников по нисходящей).
-
Глобальные словари не представленны в БД отдельными таблицами - это таблица сущностей (определенного класса, с точностью до полиморфизма), она не имеет внешнего ключа к агрегирующей сущности. Но с точки зрения ООП - это такой же агрегированный словарь, как и локальный.
-
Локальный список содержит произвольное подмножество, выборку записей, которое принадлежит конкретному экземпляру (объекту класса).
- Такие коллекции всегда являются частью агрегата и не могут существовать отдельно от родителя (например, у заказа есть локальный словарь параметров, содержащий только параметры этого заказа).
- В реляционной модели локальные коллекции реализуются через отношение «один‑ко‑многим»: каждая дочерняя запись содержит внешний ключ на родителя. Поэтому при сохранении локального словаря необходимо обеспечивать корректную привязку дочерних элементов к родителю.