Как повторить транзакцию, которая не удалась из-за тупика? - PullRequest
0 голосов
/ 01 октября 2010

Я использую linq-sql, и это то, что мне нужно.

Sub Commit()
Try

StepStart:

Transaction Scope Serialized
Begin Transaction
Check BusinessRule1
Check BusinesRule2

if BusinessRulesFailed
{ Transaction.Rollback }
else {
Query = db.out
db.SubmitChanges()
Transaction.Commit()
}

Catch DeadLockException
Goto StepStart

End Try

End Sub

Можно ли следовать этому подходу?Может кто-нибудь привести пример в C # или VB.Net

1 Ответ

0 голосов
/ 01 октября 2010

Да, все в порядке, чтобы использовать этот подход. Мы делаем что-то подобное. Я бы немного задержался, скажем, 500 мс.

При использовании стратегии блокировки SQL Server (и Sybase) всегда возможны взаимоблокировки: вы можете только уменьшить вероятность в соответствии с MSDN (для 2000-бит пока действительным) . Который также говорит, что нужно повторить.

Я также видел коммерческие приложения, которые тоже повторяют попытки.

Другой вариант - включить изоляцию моментального снимка , что не идеально, хотя

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