См. отображение коллекции в справочной документации.Существует несколько способов сопоставления свойства IList
.
A bag - это неупорядоченная неиндексированная коллекция, которая может содержать один и тот же элемент несколько раз.
<bag name="Transactions" lazy="true" table="Transaction" >
<key column="OrderId"/>
<one-to-many class="Transaction"/>
</bag>
set - неупорядоченная, неиндексированная коллекция, содержащая уникальные элементы.
<set name="Transactions" lazy="true" table="Transaction" >
<key column="OrderId"/>
<one-to-many class="Transaction"/>
</set>
A list - упорядоченная и проиндексированная коллекция, которая может содержать один и тот же элемент несколько раз.
<list name="Transactions" lazy="true" table="Transaction" >
<key column="OrderId"/>
<index column="ordering"/>
<one-to-many class="Transaction"/>
</list>
NHibernate может возвращать неупорядоченные коллекции в отсортированном порядке, используя атрибут sort .
Никакое обсуждение отображения коллекции не завершено без упоминания каскад .Это позволяет применять операции над родительским объектом к объектам коллекции.
- Обычно не имеет смысла включать каскад для ассоциации
<many-to-one>
или <many-to-many>
.Каскад часто полезен для ассоциаций <one-to-one>
и <one-to-many>
. - Если срок жизни дочернего объекта ограничен сроком жизни родительского объекта, сделайте его объектом жизненного цикла, указав cascade = "all-delete-orphan ".
- В противном случае вам может вообще не понадобиться каскад.Но если вы думаете, что вы часто будете работать с родителем и потомками вместе в одной транзакции и хотите сэкономить немного времени на наборе текста, рассмотрите возможность использования cascade = "persist, merge, save-update"