NHibernate auto сохраняет любые изменения, внесенные в объект независимо от того, выполняете ли вы вызов session.save/update или нет при совершении транзакции. НАПРИМЕР.NHibernate - Сохранение изменений только при выполнении вызова сохранения/обновления
session.BeginTransaction();
User user = repos.getUser("tony");
user.Age = 34
transaction.Commit();
Возраст обновлен. Это может раздражать, когда вы хотите получить объект из БД и внести некоторые изменения без сохранения этих изменений. Вы можете session.evict объекта, но тогда вы теряете возможность загрузки прокси.
Есть ли способ получить NHibernate только для сохранения изменений при вызове сохранения/обновления?
Update:
Спасибо за ответы, никто не сказал мне, как это сделать (и это не может быть возможно), так что я собираюсь оставить его без ответа.
Вы должны обернуть все вызовы db в транзакции и зафиксировать транзакцию, чтобы закрыть ее.
Я делаю это, потому что есть сложная сортировка. Я делаю результаты, которые на самом деле невозможны с помощью SQL/NHibernate. К сожалению, NHibernate предполагает, что я хочу сохранить этот новый заказ обратно в БД.
Мой обходной путь, чтобы добавить свойство к моему атрибуту сделки [сделка (onlyread = истина)], который заставляет его использовать FlushMode.Never
Я думаю, что для будущей работы я просто убедитесь, что только внести изменения, которые Я хочу упорствовать. Жаль, что есть возможность не только сохранять, когда вы это явно вызываете.
Что произойдет, если вы поместите свой transaction.commit перед пользователем. – blindmeis
Ну, вам не нужно открывать транзакцию ... – flq
Почему вы хотите вносить изменения в сущность и не сохранять их? Возможно, ответ заключается в изменении дизайна, а не в том, как работает NHibernate. –