¿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:
Espero que aclare algunas dudas. :)