NHibernate - после обновления сессия все еще грязная - PullRequest
1 голос
/ 19 октября 2011

Я столкнулся с проблемой с NH (v2.1.2), все еще думая, что сессия грязная после того, как я обновил единственный объект, который был изменен в этом сеансе.

У меня есть родитель-> дочерние отношения, настроенные с помощью этого отображения следующим образом:

<set name="ChildItem" access="field.camelcase-underscore"
     lazy="true"
     cascade="save-update"
     inverse="true">
  <key column="PARENT_ITEM_KEY"/>
  <one-to-many class="....ChildItem"/>
</set>

Вот шаги по воспроизведению проблемы:

1 - Создайте новый ChildItem и добавьте его в коллекцию Parent, но не сохраняйте его. Теперь session.IsDirty () возвращает true (как и ожидалось).

2 - Вызовите session.Refresh (родительский), чтобы отменить мои изменения. После обновления родительская коллекция теперь не содержит новый дочерний элемент (как и ожидалось).

3 - Теперь session.IsDirty () возвращает true - хотя я ожидал бы false, поскольку я обновил единственный измененный элемент.

Копаясь в SessionImpl через отладчик, я вижу, что у NH все еще есть ожидающая вставка для нового ChildItem в его ActionQueue.

Возможно ли в этом сценарии вернуть сеанс в состояние IsDirty () = false? Я не хочу отказываться от всей сессии для этого.

Любая помощь высоко ценится! Спасибо!

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

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

0 голосов
/ 19 октября 2011

Вы можете попробовать следующее вместо Refresh(). Это обычный обходной путь для проблем с Refresh(), но я не знаю, поможет ли это в вашем случае.

session.Evict(parent);
session.Load(parent, parent.Id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...