Linq-версия SELECT FOR UPDATE - PullRequest
       7

Linq-версия SELECT FOR UPDATE

0 голосов
/ 04 декабря 2009

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

Другими словами, у меня есть такая транзакция:

Dim query = From row in Table _
            Where row.ID = <blah> _
            Select row
Dim result = query.Single()
result.COLUMN = 2
dataContext.SubmitChanges()

Встроенный оптимистичный параллелизм блокирует запись при вызове SubmitChanges(), но если запись изменяется после Single() и до SubmitChanges(), возникает ошибка.

... по крайней мере, это моя теория ...

Кто-нибудь знает способ запустить блокировку при вызове Single() вместо просто по SubmitChanges()?

Ответы [ 3 ]

1 голос
/ 04 декабря 2009

Существуют способы выполнения транзакций с Linq to SQL - но я еще не получил.

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

LINQ to SQLTransactions (LINQ to SQL) (Microsoft)

и короткое видео:

http://www.microsoft.com/uk/msdn/nuggets/nugget/206/Transactions-in-LINQ-to-SQL.aspx

0 голосов
/ 04 декабря 2009

Самое простое, что может сработать, - это использовать DataContext.ExecuteCommand и отправить свой собственный оператор обновления.

0 голосов
/ 04 декабря 2009

Нет, вам нужно заключить транзакцию в блок try / catch и обработать возникшее исключение. Linq to SQL предоставляет много информации, чтобы вы могли разумно разобраться с исключением. Смотри http://elsharpo.blogspot.com/2008/04/handling-concurrency-conflicts-in-linq.html

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