NHibernate - сохраняются изменения только при вызове сохранения / обновления - PullRequest
4 голосов
/ 16 ноября 2010

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.*

Я думаю, что для будущей работы я просто сделаю только те изменения, которые я хочу сохранить.Жаль, что нет возможности сохранить только при явном вызове.

1 Ответ

3 голосов
/ 16 ноября 2010

Вот так сконструированы сеансы NHibernate.

Если вы предпочитаете делать все вручную, используйте вместо этого IStatelessSession.Вы потеряете кеширование, ленивую загрузку и т. Д.

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