¿Cómo gestiona SqlConnection IsolationLevel?

EstaArtículo de MSDN Establece que:

Un nivel de aislamiento tiene un alcance para toda la conexión, y una vez configurado para una conexión con la instrucción SET TRANSACTION ISOLATION LEVEL, permanecerá vigente hasta que se cierre la conexión o se establezca otro nivel de aislamiento. Cuando se cierra una conexión y se devuelve al grupo, se retiene el nivel de aislamiento de la última instrucción SET TRANSACTION ISOLATION LEVEL. Las conexiones posteriores que reutilizan una conexión agrupada utilizan el nivel de aislamiento que estaba vigente en el momento en que se agrupa la conexión.

losSqlConnection La clase no tiene ningún miembro que pueda mantener el nivel de aislamiento. Entonces, ¿cómo sabe una conexión en qué nivel de aislamiento ejecutar?

La razón por la que pregunto esto es por el siguiente escenario:

Abrí una transacción usando TransactionScope en modo serializable, diga "T1".Abrió una conexión para T1.T1 está terminado / desechado, la conexión vuelve al grupo de conexiones.¡Llamé a otra consulta sobre la misma conexión (después de obtenerla del grupo de conexiones) y esta consulta se ejecuta en modo serializable!

Problema:

¿Cómo sabe la conexión agrupada qué nivel de aislamiento se le ha asociado?¿Cómo revertirlo a otro nivel de transacción?

Resolución:
La razón por la cual las conexiones agrupadas están devolviendo el nivel de aislamiento serializable es por la siguiente razón:

Tiene un grupo de conexiones (digamos CP1)CP1 puede tener 50 conexiones.Elige una conexión C1 de CP1 y la ejecuta con Serializable. Esta conexión tiene su nivel de aislamiento establecido ahora. Hagas lo que hagas, esto no se restablecerá (a menos que esta conexión se use para ejecutar un código en un nivel de aislamiento diferente).Después de ejecutar la consulta C1 (Serializable) vuelve a CP1.Si los pasos 1-4 se ejecutan nuevamente, entonces la conexión utilizada puede ser otra conexión que no sea C1, digamos C2 o C3. Entonces, eso también tendrá su nivel de aislamiento establecido en Serializable.Entonces, lentamente, Serialzable está configurado para múltiples conexiones en CP1.Cuando ejecuta una consulta donde no se está realizando una configuración de nivel de aislamiento explícito, la conexión elegida de CP1 decidirá el nivel de aislamiento. Por ej. si dicha consulta solicita una conexión y CP1 usa C1 (serializable) para ejecutar esta consulta, esta consulta se ejecutará en modo serializable aunque no la haya configurado explícitamente.

Espero que aclare algunas dudas. :)

Respuestas a la pregunta(4)

Su respuesta a la pregunta