Вы должны использовать SNAPSHOT
уровень изоляции. Лучше всего включить функцию READ COMMITTED SNAPSHOT на уровне базы данных, которая автоматически преобразует все транзакции READ COMMITTED по умолчанию в транзакции моментальных снимков.
Причин, по которым SNAPSHOT лучше всего подходит для приложений, особенно для приложений, которые могут столкнуться с блокировкой из-за проблем параллелизма, бесчисленное множество, а преимущества бесконечны. Это правда, что SNAPSHOT-изоляция происходит из-за стоимости используемых ресурсов , но если вы не измерили и не нашли убедительных доказательств того, что это хранилище версий строк, вызывающее проблемы, вы не можете отклонить его заранее.
Единственный уровень изоляции, который никогда не следует использовать, - НЕОГРАНИЧЕННЫЙ. Это напрашивается на неприятности. Грязные чтения - это непоследовательные чтения .
REPEATABLE и SERIALIZABLE имеют чрезвычайно узкие варианты использования, и вам, скорее всего, они никогда не понадобятся. К сожалению, SERIALIZABLE злоупотребляет .Net System.Transactions и MTS / COM +, поэтому многие приложения в конечном итоге используют его (и из-за этого возникают огромные проблемы с масштабируемостью), хотя это и не требуется.