Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

LINQ + TransactionScope non modificherà il livello di isolamento in SQL Server Profiler

Dipende da come hai creato la transazione.

Se hai eseguito SQL inline per avviarlo (ad es. BEGIN TRAN ), L2S non sarà a conoscenza della transazione e ne creerà una nuova annidata in READ COMMITTED .

Tuttavia, se hai utilizzato System.Transaction o hai impostato una transazione sul tuo DataContext , SubmitChanges parteciperà a tale transazione.

Puoi vedere queste transazioni che iniziano e si fermano in Profiler se scegli TM: Begin Tran e TM: Commit Tran classi di eventi.

Nota:ADO.Net non emette BEGIN TRAN né emette SET TRANSACTION ISOLATION in batch, questo viene fatto a un livello inferiore.

Se tu davvero si desidera confermare il comportamento, creare un trigger su una tabella che inserisca il livello di isolamento corrente in una tabella di registrazione e verificarlo.

Puoi aumentare il tuo attuale livello di isolamento eseguendo:

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