Параллельное увеличение целочисленного столбца при обновлении с помощью NHibernate - PullRequest
1 голос
/ 24 апреля 2011

У меня есть таблица сообщений с числовым столбцом Version для отслеживания n-й ревизии для каждой записи. Каждый раз, когда строка обновляется, я бы хотел, чтобы ее Version число увеличивалось.

В настоящее время я увеличиваю столбец в логике своего приложения, но, поскольку post.Version += 1; не равно UPDATE Posts SET Version = Version + 1..., я беспокоюсь, что два одновременных обновления приведут только к одному приращению версии.

Решить это легко с помощью ручного выражения SQL (как указано выше) или триггера обновления, но я бы предпочел, чтобы Fluent NHibernate позаботился об этом для меня, если это возможно.

Использование транзакции для обновления не помешает двум одновременным чтениям одновременно увидеть версию «7», и обе решат, что следующее значение должно быть 8. Таким образом, два обновления до версии 7 могут привести к значению 8 вместо из 9.

Как спроектировать или отобразить автоинкрементный целочисленный столбец, безопасный для параллелизма?

Ответы [ 2 ]

4 голосов
/ 24 апреля 2011

Это уже запечено в NHibernate.Проверьте документы NH на теге <version> и Оптимистическом контроле параллелизма.

1 голос
/ 24 апреля 2011

Почему вы управляете столбцом версии вручную?

Используйте поддержку NHibernate для оптимистичного параллелизма (см. http://www.nhforge.org/doc/nh/en/index.html#mapping-declaration-version), и вы получите это бесплатно (вместе с более корректным поведением IMO)

...