NHibernate Оптимистичный Параллелизм - PullRequest
1 голос
/ 21 июля 2009

Я исследую оптимистический параллелизм в NHibernate. У меня есть сценарий, который очень похож на то, что описано здесь:

http://weblogs.asp.net/stefansedich/archive/2008/10/01/set-the-value-of-a-version-column-in-nhibernate-manually.aspx

Вы бы порекомендовали перейти с предложенным решением в этом блоге?

Спасибо

1 Ответ

3 голосов
/ 26 ноября 2009

В блоге предлагается использовать перехватчик для повторной загрузки номера текущей версии из базы данных, чтобы выполнить ручную проверку версии с версией, переданной через объект из объекта DTO. Это, безусловно, будет работать, но, как описано в статье, добавляется дополнительный удар по БД для загрузки номера текущей версии.

Лучшее решение, которое кажется довольно очевидным, поскольку на самом деле это то, что описано в документации к «Проверка версии приложения», как описано и процитировано в этой записи блога. То есть, выполните проверку версии для изначально загруженного объекта , используя версию DTO. В частности, используя код из статьи (изменения в коде статьи полужирный ):

    public void Update(MyDTO dto) {

        // Select the item.
        var item = this.repository.SelectById(dto.Id);

<b>
        // Verify there hasn't been a concurrent change
        if(item.Version != dto.Version)
        {
            throw new StaleObjectStateException();
        }
</b>

        // Map values from DTO to model.
        item.Name = dto.Name;
        <b><s>item.Version = dto.Version;</s></b>

        // Call update
        this.repository.Update(item);   

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