Коллекция упорядоченных списков Nhibernate не получена по своему заказу - PullRequest
1 голос
/ 31 июля 2011

Насколько я понимаю, при отображении коллекции в виде списка и предоставлении столбца для индексации:

  1. NHibernate сохраняет порядковый номер в данном столбце, пока эта коллекция изменяется
  2. Когдаколлекция загружена, ее элементы загружены в соответствии с поддерживаемым порядком столбца

К сожалению, мой опыт показывает, что работает только (1).Вот карта:

            HasMany(x => x.Attachments)
            .AsList( index => index.Column("OrderInProduct") )
            .Cascade.AllDeleteOrphan()  // Handle cascade upserts
            ;

Мои ожидания в отношении (2) неверны?Мое отображение неверно?

Ответы [ 2 ]

1 голос
/ 31 июля 2011

Вы можете добавить заказ:

HasMany(x => x.Attachments)
            .AsList( index => index.Column("OrderInProduct") )
            .OrderBy( o => o.Column("OrderInProduct") )
            .Cascade.AllDeleteOrphan()  // Handle cascade upserts
            ;
0 голосов
/ 05 июня 2019

Я только что играл с этим, и 2) работает для меня. Ваше отображение в порядке.

Я полагаю, что NHibernate упорядочивает коллекцию в памяти на основе значения столбца индекса, не выполняя SQL-оператор Order By. Мне пришла в голову мысль, что NHibernate мог бы выполнить сортировку памяти здесь - Это выполняет упорядочивание в запросе SQL, а не в памяти.

Я не смог найти сортировку памяти коллекции в коде NHibernate, поэтому, чтобы доказать, что сортировка памяти работает, я удалил первичный ключ (Id, Index) из таблицы дочерних сущностей, сохранил 2 дочерних сущности (index 0 и index 1). ), вручную - используя ручной sql - переключил значения индекса (поэтому первая запись получила индекс 1, а вторая запись получила индекс 0), затем я загрузил родительский объект и проверил, что записи были загружены в ожидаемом порядке.

...