SqlConnection.BeginTransaction
принимает аргумент IsolationLevel
, и именно так контролируется уровень изоляции соединений SqlClient. Другой вариант - использовать универсальный System.Transactions и указать уровень изоляции в TransactionOptions.IsolationLevel
, передаваемом конструктору TransactionScope . Как в модели программирования SqlClient, так и в System.Transactions уровень изоляции должен быть явно указан для каждой транзакции. Если не указан, будет использоваться значение по умолчанию (Read Committed для SqlClient, Serializable for System.Transactions).
Соединения в пуле не используются вслепую. У них есть скрытые внутренние члены для отслеживания текущего состояния, такого как текущая транзакция, ожидающие результаты и т. Д., И инфраструктура может очистить соединение, возвращаемое в пул. То, что состояние не отображается в модели программирования, это не значит, что его там нет (это относится к любому классу библиотеки, любой конструктор класса может скрыть член под зонтиком internal
).
И, наконец, любое соединение, повторно используемое из пула, которое он вызывает, sp_reset_connection
, который является серверной процедурой, которая очищает состояние сеанса на стороне сервера.