NHibernate + ViewModel + MVC + Оптимистичная блокировка - PullRequest
3 голосов
/ 10 декабря 2010

Хорошо, у нас есть следующий senario, но как вы делаете Оптимистическая блокировка

у нас есть класс клиента

  • Имя
  • Адрес
  • Версия

Версия - это переменная столкновения (int), которая при редактировании строки увеличивает версию на 1.

Теперь у нас есть Мартин, который открывает Customer 129, так как в модели представления объект модели сглаживается в модели представления, а затем передается на экран редактирования клиента.

Дэвид тем временем также открывает Клиент 129 для редактирования, меняет имя и сохраняет.

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

Вопрос в том, как вы справляетесь с оптимистической блокировкой с помощью NH (используя FluentNHibernate для сопоставлений).

  • нужно вставить номер версии в ViewModel? затем, когда оно было отправлено с обновлением, загрузите текущий объект Model и проверьте версию Numbers
  • Или есть лучший способ (я знаю, что NH сделает управление версиями, если я загружу, отредактирую и обновлю в одном сеансе)

еще одна вещь, этот сценарий будет использоваться на ферме, не разделяющей кеш

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

1 Ответ

2 голосов
/ 10 декабря 2010

По сути, это автономная блокировка, с которой NHibernate не имеет дело.

Что вам нужно сделать, это что-то вроде:

Запрос на редактирование:

  • Загрузка объекта
  • Вставка объекта в ViewModel (включая номер версии)
  • и т.д ...

Запрос на сохранение:

  • Загрузить объект (снова)
  • Проверка номера версии из модели представления относительно сущности
    • если не совпадают, показать ошибку / параметры согласования
    • еще обновить сущность и т.д ...
...