sql >> Database >  >> RDS >> Sqlserver

LINQ + TransactionScope zal het isolatieniveau in SQL Server Profiler niet wijzigen

Het hangt af van hoe u de transactie hebt gemaakt.

Als u inline SQL hebt uitgevoerd om het te starten (bijv. BEGIN TRAN ), zal L2S niet op de hoogte zijn van de transactie en zal een nieuwe geneste genereren in READ COMMITTED .

Als u echter System.Transaction heeft gebruikt of een transactie heeft ingesteld op uw DataContext , SubmitChanges zal deelnemen aan die transactie.

U kunt deze transacties zien starten en stoppen in Profiler als u kiest voor de TM: Begin Tran en TM: Commit Tran evenement klassen.

Opmerking:ADO.Net geeft BEGIN TRAN niet uit noch geeft het SET TRANSACTION ISOLATION in batches gebeurt dit op een lager niveau.

Als je echt het gedrag wilt bevestigen, maak een trigger op een tabel die het huidige isolatieniveau in een logtabel invoegt en controleer deze.

U kunt uw huidige isolatieniveau ophalen door het volgende uit te voeren:

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


  1. Video:Oracle 12c IDENTITY Column Performance op RAC

  2. Onbekende codering tijdens het gebruik van df.to_sql() om naar MySQL te schrijven met pyodbc

  3. Oracle user_indexes vertaling naar MySQL

  4. Hoe waarden te vermenigvuldigen met SQL