Как SqlConnection управляет IsolationLevel?
этоСтатья MSDN говорится, что:
Уровень изоляции имеет область действия всего соединения, и после установки для соединения с помощью инструкции SET TRANSACTION ISOLATION LEVEL он остается в силе до тех пор, пока соединение не будет закрыто или не будет установлен другой уровень изоляции. Когда соединение закрывается и возвращается в пул, уровень изоляции из последнего оператора SET TRANSACTION ISOLATION LEVEL сохраняется. Последующие соединения, повторно использующие объединенное в пул соединение, используют уровень изоляции, который действовал во время объединения в пул.
SqlConnection В классе нет члена, который может содержать уровень изоляции. Так как же соединение знает, на каком уровне изоляции работать?
Я спрашиваю об этом из-за следующего сценария:
Я открыл транзакцию, используя TransactionScope в режиме Serializable, скажем, «T1».Открыл соединение для Т1.T1 завершен / удален, соединение возвращается в пул соединений.Вызывается другой запрос на том же соединении (после получения его из пула соединений), и этот запрос выполняется в сериализуемом режиме !!!Проблема:
Как объединенное соединение все еще знает, какой уровень изоляции был связан с ним ???Как вернуть его на какой-то другой уровень транзакции ???Разрешение:
Причина, по которой объединенные в пул соединения возвращают сериализуемый уровень изоляции, заключается в следующей причине:
Надеюсь, что это проясняет некоторые сомнения. :)