nHibernate: сброс первоначального состояния объекта - PullRequest
1 голос
/ 11 августа 2011

У меня очень простой запрос. Я использую WPF Binding для редактирования объекта, который загружается ISession. Если кто-то редактирует этот объект в форме из-за двухстороннего связывания и сеанса с сохранением состояния, всякий раз, когда я закрываю сеанс, изменения в объекте, сделанные в форме, сохраняются обратно в базе данных. Какой лучший способ избежать этого?

Методы, которые я знаю:

  1. Теневое копирование объекта и использование скопированного объекта в качестве DataContext (метод, который я использую на данный момент).
  2. ISession.Clear
  3. Используйте IStatelessSession.

Есть ли способ вернуть объект в его первоначальную форму перед закрытием ISession?

Ответы [ 3 ]

1 голос
/ 11 августа 2011

См. Управление кешами на NHibernate Forge :

Когда впоследствии вызывается Flush (), состояние этого объекта будет синхронизировано с базой данных. Если вы не хотите, чтобы эта синхронизация происходила, или если вы обрабатываете огромное количество объектов и вам необходимо эффективно управлять памятью, метод Evict () можно использовать для удаления объекта и его коллекций из кэша первого уровня. *

Я думаю, это звучит так, как вы хотите.

1 голос
/ 11 августа 2011

Если вы посмотрите здесь: http://nhforge.org/wikis/howtonh/finding-dirty-properties-in-nhibernate.aspx

Это пример поиска грязных свойств.NHibernate внутренне отслеживает состояние постоянного объекта с помощью объекта EntityEntry.

Это полезно для вас, поскольку с небольшой модификацией вышеописанного метода вы можете вернуть старые значения ... которые выможно использовать для сброса свойств.

Что касается закрытия сеанса, вызывающего сброс объекта в базу данных, вы можете установить для сеанса FlushMode значение FlushMode.Never.Это будет означать, что синхронизация базы данных не произойдет, пока вы не вызовете Session.Flush ().

Кроме того, вы можете подключиться к IFlushEntityEventListener для сброса состояния объекта.Есть разумные примеры использования системы событий NHibernate на Google.

0 голосов
/ 11 августа 2011

Я бы предложил использовать транзакции. Вы просто откатите транзакцию, если это так? что ты думаешь?

...