Как поставить в очередь операцию добавления в NHibernate?

Есть ли способ поставить в очередь операцию «Добавить» в NHibernate, как это делают Linq to SQL и Entity Framework?

Я хочу добавить объект в репозиторий, но не хочу сразу сохранять его в базе данных, потому что бизнес-логика сложна. Я хочу отправить все изменения, когда я вызываю ITransaction.Commit (), как это делает Entity Framework. Могу ли я сделать это?

ПРИМЕЧАНИЕ. Я обнаружил, что NHibernate выполнит команду вставки, как только я вызову метод ISession.Save (), чего не ожидалось.

ОБНОВЛЕНИЕ. Я пытаюсь установить для FlushMode значение «Зафиксировать». Но он по-прежнему сохраняет сущность немедленно, а не фиксирует все изменения, когда я вызываю ITransaction.Commit ().

ОБНОВЛЕНИЕ 2. Я нашел причину здесь http://nhibernate.info/doc/nh/en/index.html#manipulatingdata-flushing: (Исключением является то, что объекты, использующие создание собственного идентификатора, вставляются при сохранении.). Значит, я могу изменить генератор идентификаторов только на что-то другое, кроме «идентичности»? Нет других решений, аналогичных решению в EntityFramework?


person Mouhong Lin    schedule 13.10.2010    source источник


Ответы (2)


Вот как работает identity; session.Save возвращает POID, и единственный способ получить его при использовании идентификатора - выполнить фактическую вставку.

Подробнее об этом здесь: http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-explained.html

person Diego Mijelshon    schedule 13.10.2010

Используйте session.BeginTransaction () и прочитайте о транзакциях.

person jgauffin    schedule 13.10.2010
comment
Я имею в виду, что NHibernate выдает команду INSERT sql перед тем, как я вызываю transaction.Commit (), это не то, что я хочу. Я хочу, чтобы он выдавал команды sql только тогда, когда я вызываю transaction.Commit (). - person Mouhong Lin; 13.10.2010