Como o SqlConnection gerencia o IsolationLevel?
esteArtigo do MSDN afirma que:
Um nível de isolamento tem escopo para toda a conexão e, uma vez definido para uma conexão com a instrução SET TRANSACTION ISOLATION LEVEL, permanece em vigor até que a conexão seja fechada ou outro nível de isolamento seja definido. Quando uma conexão é fechada e retornada ao pool, o nível de isolamento da última instrução SET TRANSACTION ISOLATION LEVEL é mantido. As conexões subsequentes que reutilizam uma conexão em pool usam o nível de isolamento em vigor no momento em que a conexão é agrupada.
oSqlConnection A classe não possui nenhum membro que possa manter o nível de isolamento. Então, como uma conexão sabe em que nível de isolamento executar ???
A razão pela qual estou perguntando isso é devido ao seguinte cenário:
Abri uma transação usando o TransactionScope no modo serializável, digamos "T1".Abriu uma conexão para T1.T1 é finalizado / descartado, a conexão retorna ao conjunto de conexões.Chamado outra consulta na mesma conexão (depois de obtê-lo do pool de conexão) e esta consulta é executada no modo serializável !!!Problema:
Como a conexão em pool ainda sabe qual nível de isolamento foi associado a ela ???Como reverter para algum outro nível de transação ???Resolução:
O motivo pelo qual as conexões em pool estão retornando o nível de isolamento serializável deve-se ao seguinte motivo:
Espero que isso tire algumas dúvidas. :)