Мы устанавливаем уровень изоляции для Read Uncommitted, как показано ниже.Сброс Уровень изоляции при использовании транзакции Scop
TransactionOptions to = new TransactionOptions();
to.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;
using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.RequiresNew, to))
{
// Do Stuff
transaction.Complete();
}
Беда в том, когда соединение возвращается в пул он не получает сбросить обратно на уровень изоляции по умолчанию, который я понимаю, это дизайн (The transaction isolation level is not reset when you reuse a connection from the connection pool). Поэтому, когда транзакция завершается, все, что повторяет это соединение из пула, будет запущено с уровнем изоляции Read Uncommitted.
Я попытался позвонить "SET TRANSACTION ISOLATION LEVEL READ COMMITTED"
с помощью SqlCommand, но нет способа гарантировать, что он будет повторно использовать одно и то же соединение из пула. Ничто в // Do Stuff
не предоставляет базовое соединение.
Есть ли способ сбросить уровень изоляции без явной настройки его во всех вызовах БД на случай, если этот код был запущен ранее?
Это подход, который мы используем. Что-то как «простое» как добавочное пространство сделает строку соединения «отличной» и, таким образом, попадет в другой пул. Код проверяет изоляцию окружающего пространства, чтобы определить, какую CS использовать. Это не идеально, но это лучше, чем ничего. – user2864740