Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

LINQ + TransactionScope ändert die Isolationsstufe in SQL Server Profiler nicht

Es hängt davon ab, wie Sie die Transaktion erstellt haben.

Wenn Sie zu Beginn Inline-SQL ausgeführt haben (z. B. BEGIN TRAN ), erkennt L2S die Transaktion nicht und erstellt eine neue verschachtelte Transaktion in READ COMMITTED .

Wenn Sie jedoch System.Transaction verwendet haben oder eine Transaktion für Ihren DataContext festgelegt haben , wird SubmitChanges an dieser Transaktion teilnehmen.

Sie können sehen, wie diese Transaktionen im Profiler gestartet und gestoppt werden, wenn Sie TM: Begin Tran auswählen und TM: Commit Tran Event-Klassen.

Hinweis:ADO.Net gibt BEGIN TRAN nicht aus noch gibt es SET TRANSACTION ISOLATION aus bei Chargen erfolgt dies auf einer niedrigeren Ebene.

Wenn Sie wirklich das Verhalten bestätigen möchten, erstellen Sie einen Trigger für eine Tabelle, der die aktuelle Isolationsstufe in eine Protokollierungstabelle einfügt, und überprüfen Sie sie.

Sie können Ihre aktuelle Isolationsstufe abrufen, indem Sie Folgendes ausführen:

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