Получение измененных сущностей из сеанса NHibernate - PullRequest
2 голосов
/ 13 января 2010

Интересно, существует ли плавный способ отслеживания измененных сущностей с помощью NHibernate.

Session.IsDirty () - это хороший способ узнать, что есть изменения, но не какие. До сих пор я регистрировал свои изменения в Списке, чтобы иметь возможность указать их позже. В конце концов я зациклился на этом списке и вызвал Session.Save () для каждого из них и удалил элемент из списка.

Можно ли как-нибудь обойти это?

Заранее большое спасибо

Sebi

1 Ответ

0 голосов
/ 13 января 2010

Похоже, что вы пытаетесь обойти проблему, что ваша продолжительность сеанса неверна. Сессия предназначена для использования в одной единице работы. Вместо того, чтобы очищать сессию таким образом, чтобы продолжать использовать ее, вы должны очистить ее и начать заново с новой. Если вы используете это для ускорения работы приложения из-за кэширования, я предлагаю вам взглянуть на кэширование второго уровня в NHibernate, который работает на уровне SessionFactory, а не Session.

Если у вас длительный процесс редактирования с большим пакетным сохранением в конце, то, на мой взгляд, вы должны работать с отключенными объектами. Таким образом, вы используете один сеанс для загрузки объектов и любых связанных с ними объектов, редактируете их вне контекста сеанса, затем в конце процесса заново присоединяете эти объекты к новому сеансу, используя SaveOrUpdate, а затем очищаете сессия. Такой подход работает лучше всего, если вы используете автономную оптимистическую блокировку для параллельного подхода, используя, например, столбец SQL Server timestamp или виртуальный столбец Oracle ORA_SCN в качестве версии. Если объект изменился под вами, то обновление завершится неудачно с StaleObjectStateException.

Но YMMV, и мне нужно знать больше о вашем заявлении, чтобы сказать что-то более конкретное, чем это.

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