Как поставить в очередь операцию добавления в NHibernate?
Есть ли какой-нибудь способ поставить в очередь операцию "Добавить" в NHibernate, как это делает Linq to SQL и EntityFramework?
Я хочу добавить объект в репозиторий, но не хочу сразу же сохранять его в базе данных, потому что бизнес-логика сложна. Я хочу отправить все изменения при вызове ITransaction.Commit(), как это делает Entity Framework. Могу ли я сделать это?
ПРИМЕЧАНИЕ: я обнаружил, что NHibernate выполнит команду вставки, как только я вызову метод ISession.Save(), это не ожидается.
ОБНОВЛЕНИЕ: я пытаюсь установить FlushMode для фиксации. Но он все же сразу сохраняет сущность, а не фиксирует все изменения, когда я вызываю ITransaction.Commit().
ОБНОВЛЕНИЕ 2 Я нашел причину здесь http://nhibernate.info/doc/nh/en/index.html: (Исключением является то, что объекты, использующие генерацию собственных идентификаторов, вставляются при их сохранении.). Таким образом, я могу только изменить генератор Id на что-то, кроме "идентичности"? Нет других решений, похожих на решение в EntityFramework?
2 ответа
Вот как identity
работает; session.Save возвращает POID, и единственный способ получить его при использовании идентичности - выполнить фактическую вставку.
Подробнее об этом здесь: http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-explained.html
Используйте session.BeginTransaction() и читайте о транзакциях.