Коллекция сумок Nhibernate, когда это воссоздает? - PullRequest
2 голосов
/ 07 июня 2011

Я сделал много примеров, чтобы проверить, когда коллекция сумок воссоздается при добавлении или удалении предмета из коллекции. Я прочитал это в http://knol.google.com/k/nhibernate-chapter-16-improving-performance разделе 16.5.1. Таксономия:

Сумки - наихудший случай. С сумкой позволяет дублировать значения элементов и не имеет индексного столбца, нет первичного ключа может быть определено NHibernate не имеет никакой возможности различать дубликаты строк. NHibernate решает эту проблему путем полного удаления (в одном DELETE) и воссоздание коллекции всякий раз, когда это меняется. Это может быть очень неэффективно.

Я сделал двунаправленный тип один-ко-многим (Персона -> Адреса) и следующие тесты:
Тест 1: Инверсия = ложь; действие = вставка, обновление, удаление, граф; Типы коллекции: набор, сумка
Результат: коллекции ведут себя точно так же!

Тест 2: Инверсия = истина; действие = вставка, обновление, удаление, граф; Типы коллекции: набор, сумка
Результат: коллекции ведут себя практически одинаково! Я вижу только разницу в добавлении нового предмета в коллекцию сумок - когда я делаю, эта коллекция не заполняется данными из базы данных.

Я использовал профилировщик / статистику сеанса nhibernate для анализа изменений в объекте сеанса и в базе данных. Но я не видел воссоздающих предметов коллекции, что случилось? я память?

1 Ответ

2 голосов
/ 28 ноября 2011

Воссоздание коллекций применяется только для сущностей, загруженных из базы данных.При выполнении тестов в том же сеансе, в котором были созданы объекты, NHibernate знает, что коллекции пусты, манипулирует им в памяти и сохраняет только конечное состояние в базу данных при фиксации транзакции / очистке сеанса.

Выполнены аналогичные тесты - см. эту запись в блоге пример воссоздания коллекции сумок.

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