NHibernate: обновления в одной сессии не отражаются в другой открытой сессии - PullRequest
3 голосов
/ 18 января 2011

Это приложение WPF.Я использую одну сессию на докладчика.Пользователь перемещается от одного докладчика к другому, но обычно не глубже 2 уровней:

  1. Открыть докладчика1 (Session1) -> Отображает список объектов
  2. Перейдите к Presenter2 (Session2)(Presenter1 и Session1 все еще живы)
  3. Presenter2 (Session2) -> Редактирование объекта
  4. Перейдите обратно к Presenter1.Сессия 2 закрыта, и изменения сохраняются в базе данных
  5. Presenter1 перезагружает список сущностей, но изменения, внесенные на шаге 3, нет

Как можно решить этот сценарий?

1 Ответ

3 голосов
/ 18 января 2011

Это происходит потому, что сеанс включает в себя то, что обычно называют кэшем первого уровня. Он просто содержит все сущности, которые Сессия «видела» за время своей жизни, чтобы избежать повторного извлечения их из базы данных.

Вы можете использовать session.Clear(), чтобы очистить сеанс перед выполнением каких-либо запросов. Если вы делаете это в своем докладчике после каждого действия навигации, у вас должно быть все в порядке.

Другой подход заключается в определении класса SessionManager, который управляет вашим сеансом, чтобы два докладчика совместно использовали свой сеанс. Это может быть лучшим решением, если вы можете найти способ определить продолжительность жизни одного сеанса (я бы не рекомендовал хранить один и тот же сеанс для всего выполнения программы).

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