Если вы посмотрите здесь: http://nhforge.org/wikis/howtonh/finding-dirty-properties-in-nhibernate.aspx
Это пример поиска грязных свойств.NHibernate внутренне отслеживает состояние постоянного объекта с помощью объекта EntityEntry.
Это полезно для вас, поскольку с небольшой модификацией вышеописанного метода вы можете вернуть старые значения ... которые выможно использовать для сброса свойств.
Что касается закрытия сеанса, вызывающего сброс объекта в базу данных, вы можете установить для сеанса FlushMode значение FlushMode.Never.Это будет означать, что синхронизация базы данных не произойдет, пока вы не вызовете Session.Flush ().
Кроме того, вы можете подключиться к IFlushEntityEventListener для сброса состояния объекта.Есть разумные примеры использования системы событий NHibernate на Google.