Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 NHibernate, 3-х звенка, отслеживание конкурентного доступа  [new]
kmaw
Member [заблокирован]

Откуда: бобруйск
Сообщений: 24786
В 2-звенке проблем не было - все само, как в документации написано, отслеживалось. В 3-х звенке в процедуре сохранения на веб-сервисе делаю так:
1. принимаю на вход DTO
2. по Id из DTO запрашиваю DomainObject
3. на основе DTO обновляю состояние DomainObject
4. сохраняю DomainObject в БД

Если в 2-х звенке мне достаточно было открыть в приложении форму редактирования DomainObject, вручную из другого приложения изменить Version в БД, нажать кнопку сохранить и получить StaleObjectStateException, то теперь это не канает в связи с п.2 (ручное изменение Version у DomainObject после выполнения п.2 на основе DTO эффекта не даёт - NHibernate, видимо, это сечет).

Подозреваю, что NHibernate бросит StaleObjectStateException, если изменение в БД произойдет не до п.1, а перед п.4.

Вопрос в том, как теперь разруливать конкурентный доступ. Пока что к обычной схеме, что была в двузвенке (отлавливание StaleObjectStateException на случай, если изменение в БД до п.4 произошло) добавил "ручную" проверку Version у DTO и DomainObject - если различаются, значит "запись изменена др. пользователем". А у объекта могут быть связанные коллекции, эту проверку приходиться делать и там...

Спасибо.
5 дек 12, 08:22    [13578763]     Ответить | Цитировать Сообщить модератору
 Re: NHibernate, 3-х звенка, отслеживание конкурентного доступа  [new]
SolYUtor
Member

Откуда:
Сообщений: 948
kmaw,

NHibernate бросит исключение в момент сохранения, т.к. попробует выполнить примерно такую команду:
Update mytable set ..... where Id = 123 and Version = 4

В рельзультате он получит сообщение, сколько строк было обновлено (0) и бросит исключение. Его дальше и обрабатывайте.
5 дек 12, 11:22    [13579707]     Ответить | Цитировать Сообщить модератору
 Re: NHibernate, 3-х звенка, отслеживание конкурентного доступа  [new]
kmaw
Member [заблокирован]

Откуда: бобруйск
Сообщений: 24786
SolYUtor,

это то понятно. но, как я описал по пунктам, перед сохранением "2. по Id из DTO запрашиваю DomainObject". так что хиберовский StaleObjectStateException возможен только если после п.3 до п.4 изменится состояние в БД. Но это один из вариантов, маловероятный к тому же.
6 дек 12, 19:38    [13590486]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить