Специально для ActiveRecord: если вы не изменяете SessionScope самостоятельно, AR по умолчанию использует шаблон управления сеансом сеанс на вызов, где новый сеанс создается для каждой операции ActiveRecordMediator. Таким образом, все извлеченные вами объекты уже отключены от родительского сеанса, как только вы их извлекаете. Изменения не будут сохраняться до тех пор, пока вы не вызовете Save (или SaveAndUpdate, или даже Update), который в шаблоне сеанса на вызов создаст сеанс, присоединит объект, который вы сохраняете к этому сеансу, вызовите Save и затем удалите сеанс (вызывая сброс и, следовательно, запись изменений).
Когда вы используете AR таким образом, он делает именно то, что вам нужно (т.е. никакие изменения не записываются обратно, если вы явно не вызываете Save). Но это явно идет вразрез с ожидаемым поведением NHibernate, и вы не можете выполнять ленивую загрузку или получить много пользы от кэширования. Я использовал этот шаблон для некоторых веб-приложений, но они разработаны заранее для активной загрузки, и довольно много постоянных объектов эффективно неизменяемы и статичны и могут загружаться в массовом порядке во время запуска и кэшироваться без подключения к какому-либо сессия. Если ваше приложение не подходит для этой модели, вероятно, плохая идея - сеанс на вызов.
Поскольку вы, похоже, используете шаблон UOW, вы не можете воспользоваться этим поведением. Таким образом, вы должны либо исключить объект из сеанса NHibernate (а получить доступ к реальному экземпляру ISession на самом деле не так просто, как кажется в AR), либо изменить способ работы вашего приложения, чтобы свойства постоянных объектов фактически не изменялись. до тех пор, пока ваши бизнес-правила не будут проверены.