NHibernate автоматически сохраняет любые изменения, внесенные в объект, независимо от того, выполняете ли вы сеанс session.save/update или нет при совершении транзакции.EG.
session.BeginTransaction();
User user = repos.getUser("tony");
user.Age = 34
transaction.Commit();
Возраст обновлен.Это может раздражать, когда вы хотите получить объект из БД и внести некоторые изменения без сохранения этих изменений.Вы можете session.evict объекта, но тогда вы потеряете возможность загружать прокси.
Есть ли способ заставить NHibernate сохранять только изменения, если сделан вызов сохранения / обновления?
Обновление:
Спасибо за ответы, никто не сказал мне, как это сделать (и это может быть невозможно), поэтому я собираюсь оставить это без ответа.
Вы должны обернуть все вызовы БД втранзакцию и зафиксируйте эту транзакцию, чтобы закрыть ее.
Я делаю это, потому что я делаю сложную сортировку результатов, которые на самом деле невозможны через SQL / NHibernate.К сожалению, NHibernate предполагает, что я хочу сохранить этот новый заказ обратно в БД.
Мой обходной путь - добавить свойство к моему атрибуту транзакции [Transaction (onlyread = true)], которое заставляет его использовать FlushMode.Never * 1016.*
Я думаю, что для будущей работы я просто сделаю только те изменения, которые я хочу сохранить.Жаль, что нет возможности сохранить только при явном вызове.