Разница семантическая:
- a set следует использовать, когда ваша коллекция неупорядочена и может содержать каждый элемент только один раз
- a bag все еще неупорядочен, однако - он может содержать некоторые элементы много раз (хорошо - по крайней мере с отображениями «многие ко многим»)
- a list - это упорядоченная коллекция, которая может содержать несколько элементов несколько раз - у вас есть гарантия, что элементы будут извлечены в том же порядке, в котором они были сохранены (NHibernate будет управлять указанным столбцом индекса для тебя)
Тем не менее, и сумка, и список могут быть представлены с помощью IList <> в коде - это прекрасно, но вы должны помнить, что вы не можете полагаться на порядок вещей в сумке.
При выборе способа сопоставления списка выберите вариант, который лучше всего соответствует вашей коллекции - если вам не нужен заказ, выберите сумка , если вам нужен заказ - выберите список .
Sidenote: есть возможность контролировать порядок элементов в сумке - вы должны указать атрибут order-by с соответствующим выражением sql. Однако не используйте это для эмуляции поведения list - используйте list напрямую. Атрибут order-by для bag s предназначен для использования, когда order является результатом некоторых других атрибутов, таких как упорядочение объектов по метке времени последней модификации.