Я сделал много примеров, чтобы проверить, когда коллекция сумок воссоздается при добавлении или удалении предмета из коллекции. Я прочитал это в http://knol.google.com/k/nhibernate-chapter-16-improving-performance разделе 16.5.1. Таксономия:
Сумки - наихудший случай. С сумкой
позволяет дублировать значения элементов и
не имеет индексного столбца, нет первичного ключа
может быть определено NHibernate не имеет никакой возможности
различать дубликаты
строк. NHibernate решает эту проблему
путем полного удаления (в одном
DELETE) и воссоздание коллекции
всякий раз, когда это меняется. Это может быть
очень неэффективно.
Я сделал двунаправленный тип один-ко-многим (Персона -> Адреса) и следующие тесты:
Тест 1: Инверсия = ложь; действие = вставка, обновление, удаление, граф; Типы коллекции: набор, сумка
Результат: коллекции ведут себя точно так же!
Тест 2: Инверсия = истина; действие = вставка, обновление, удаление, граф; Типы коллекции: набор, сумка
Результат: коллекции ведут себя практически одинаково! Я вижу только разницу в добавлении нового предмета в коллекцию сумок - когда я делаю, эта коллекция не заполняется данными из базы данных.
Я использовал профилировщик / статистику сеанса nhibernate для анализа изменений в объекте сеанса и в базе данных. Но я не видел воссоздающих предметов коллекции, что случилось? я память?