Я пишу приложение на C#, которое обращается к базе данных SQL Server 2005. Приложение довольно интенсивно для базы данных, и даже если я попытаюсь оптимизировать весь доступ, настройте правильные индексы и т. Д. Я ожидаю, что рано или поздно я получу тупики. Я знаю, почему происходят взаимоблокировки базы данных, но я сомневаюсь, что смогу выпустить программное обеспечение без взаимоблокировок, возникающих в какой-то момент. Приложение использует Entity Framework для доступа к базе данных.Шаблоны для обработки SQL-тупика в C#?
Есть ли хороший шаблон для обработки SQLExceptions (deadlocked) в коде клиента C# - например, для повторного запуска пакета операторов после x миллисекунд?
уточнить; Я не ищу способ, как избежать взаимоблокировок в первую очередь (уровни изоляции, индексы, порядок инструкций и т. Д.), А скорее как обращаться с ними, когда они на самом деле происходят.
Можете ли вы рассказать мне, как вы совершили фактическое повторение транзакции? Вы разместили простую петлю вокруг кода в любом месте, где у вас была транзакция, или вы придумали более общее решение? – martin
Мы реализовали цикл. Если транзакция завершилась неудачно, из-за ситуации взаимоблокировки, мы перевернули всю транзакцию и снова попытались до 5 раз. –