2009-07-13 7 views
1

SQL Server не поддерживает синтаксис «SELECT FOR UPDATE», который используется NHibernate для пессимистической блокировки. Я читал here on StackOverflow описания других альтернатив (мне понравился «SELECT WITH (...)», потому что он довольно близко).пессимистическая блокировка в SQL Server 2008 с использованием NHibernate

однако NHibernate, похоже, не поддерживает этот синтаксис.

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

+2

не то, что пессимистический замок? Оптимистическая блокировка - это когда вы * не * блокируете upfront, надеясь, что строка не изменится, и вы проверите изменения в обновлении. –

+0

, конечно, вы правы. спасибо, редактирование. –

ответ

2

NHibernate имеет стратегию версии для оптимистической блокировки:

http://ayende.com/Blog/archive/2009/04/15/nhibernate-mapping-concurrency.aspx

+0

спасибо, блог Айенде замечательный, и хотя я ошибочно спросил об оптимистичной блокировке (хотя мне нужен пессимистический замок), этот пост мне помог - так как он продемонстрировал, как сеанс.Get (1, LockMode.Upgrade); переведенный в ... FROM ... WITH (updlock, rowlock) - что означает NHibernate (не менее 2.x). Поддерживает синтаксис пессимистического блокирования SQL Server. –

0

Я не знаю много о NHibernate, но в SQL-столбцах типа ROWVERSION обычно используются для реализации оптимистической блокировки. Пример here

Смежные вопросы