беглое отображение nhibernate как Bag List, в чем разница? - PullRequest
2 голосов
/ 26 ноября 2009

Что является лучшим методом для сопоставления со списком объектов, которые должны управляться их родителем

Ответы [ 2 ]

5 голосов
/ 04 декабря 2009

Разница семантическая:

  • a set следует использовать, когда ваша коллекция неупорядочена и может содержать каждый элемент только один раз
  • a bag все еще неупорядочен, однако - он может содержать некоторые элементы много раз (хорошо - по крайней мере с отображениями «многие ко многим»)
  • a list - это упорядоченная коллекция, которая может содержать несколько элементов несколько раз - у вас есть гарантия, что элементы будут извлечены в том же порядке, в котором они были сохранены (NHibernate будет управлять указанным столбцом индекса для тебя)

Тем не менее, и сумка, и список могут быть представлены с помощью IList <> в коде - это прекрасно, но вы должны помнить, что вы не можете полагаться на порядок вещей в сумке.

При выборе способа сопоставления списка выберите вариант, который лучше всего соответствует вашей коллекции - если вам не нужен заказ, выберите сумка , если вам нужен заказ - выберите список .

Sidenote: есть возможность контролировать порядок элементов в сумке - вы должны указать атрибут order-by с соответствующим выражением sql. Однако не используйте это для эмуляции поведения list - используйте list напрямую. Атрибут order-by для bag s предназначен для использования, когда order является результатом некоторых других атрибутов, таких как упорядочение объектов по метке времени последней модификации.

0 голосов
/ 30 ноября 2009

Все примеры, которые я нашел, используют IList <> , и это то, что я использую в своем коде.

Я думаю, что Bag может быть пережитком оригинальной Java Hibernate - я смутно помню, как читал публикацию на этот счет.

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