Как отобразить упорядоченный список в nhibernate? - PullRequest
5 голосов
/ 25 ноября 2011

У меня есть два класса: container, который содержит динамический упорядоченный список Element.

Какую коллекцию C # мне следует использовать?

Какую схему БД вы мне предложите?

Как настроить отображение nhibernate?

TIA

1 Ответ

5 голосов
/ 25 ноября 2011

NHibernate поддерживает коллекции, реализованные в System.Collections.SortedList и Iesi.Collections.SortedSet.Вы должны указать компаратор в файле сопоставления:

<set name="Aliases" table="person_aliases" sort="natural">
    <key column="person"/>
    <element column="name" type="String"/>
</set>

<map name="Holidays" sort="My.Custom.HolidayComparer, MyAssembly" lazy="true">
    <key column="year_id"/>
    <index column="hol_name" type="String"/>
    <element column="hol_date" type="Date"/>
</map>

Допустимые значения атрибута sort являются несортированными, естественными и имя класса, реализующего System.Collections.IComparer.

Если выЧтобы сама база данных упорядочивала элементы коллекции, используйте атрибут order-by отображений set, bag или map.Это выполняет упорядочение в SQL-запросе, а не в памяти.

Установка атрибута order-by указывает NHibernate использовать внутренний класс ListDictionary или ListSet для словарей и наборов, поддерживая порядок элементов.Обратите внимание, что операции поиска в этих коллекциях очень медленные, если они содержат более нескольких элементов.

<set name="Aliases" table="person_aliases" order-by="name asc">
    <key column="person"/>
    <element column="name" type="String"/>
</set>

<map name="Holidays" order-by="hol_date, hol_name" lazy="true">
    <key column="year_id"/>
    <index column="hol_name" type="String"/>
    <element column="hol_date type="Date"/>
</map>

Обратите внимание, что значением атрибута order-by является порядок SQL, а не порядок HQL!

Ассоциации могут даже сортироваться по некоторым произвольным критериям во время выполнения с использованием Filter ().

sortedUsers = s.Filter( group.Users, "order by this.Name" );

Источник: NHibernate и Sorted Collections

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...