sql >> Base de Datos >  >> RDS >> Sqlserver

LINQ + TransactionScope no cambiará el nivel de aislamiento en SQL Server Profiler

Depende de cómo haya creado la transacción.

Si ejecutó SQL en línea para comenzar (EG. BEGIN TRAN ), L2S no se dará cuenta de la transacción y generará una nueva anidada en READ COMMITTED .

Sin embargo, si usó System.Transaction o tiene una transacción configurada en su DataContext , SubmitChanges participará en esa transacción.

Puede ver estas transacciones comenzando y deteniéndose en Profiler si elige TM: Begin Tran y TM: Commit Tran clases de eventos.

Nota:ADO.Net no emite BEGIN TRAN ni emite SET TRANSACTION ISOLATION en lotes, esto se hace a un nivel inferior.

Si realmente desea confirmar el comportamiento, cree un activador en una tabla que inserte el nivel de aislamiento actual en una tabla de registro y compruébelo.

Puede recuperar su nivel de aislamiento actual ejecutando:

SELECT CASE transaction_isolation_level 
WHEN 0 THEN 'Unspecified' 
WHEN 1 THEN 'Read Uncommitted' 
WHEN 2 THEN 'Read Committed' 
WHEN 3 THEN 'Repeatable Read' 
WHEN 4 THEN 'Serializable' 
WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL 
FROM sys.dm_exec_sessions 
where session_id = @@SPID