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

LINQ + TransactionScope ændrer ikke isolationsniveau i SQL Server Profiler

Det afhænger af, hvordan du har oprettet transaktionen.

Hvis du udførte inline SQL for at starte den (f.eks. BEGIN TRAN ), vil L2S ikke være opmærksom på transaktionen og vil oprette en ny indlejret i READ COMMITTED .

Men hvis du brugte System.Transaction eller har en transaktion indstillet på din DataContext , vil SubmitChanges deltage i den transaktion.

Du kan se disse transaktioner starte og stoppe i Profiler, hvis du vælger TM: Begin Tran og TM: Commit Tran event klasser.

Bemærk:ADO.Net udsteder ikke BEGIN TRAN den udsteder heller ikke SET TRANSACTION ISOLATION i partier sker dette på et lavere niveau.

Hvis du virkelig ønsker at bekræfte adfærden, opret en trigger på en tabel, der indsætter det aktuelle isolationsniveau i en logningstabel og kontroller det.

Du kan hente dit nuværende isolationsniveau ved at køre:

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. sammenligne to markører i oracle i stedet for at bruge MINUS

  2. Symfony 3 - Der opstod en undtagelse i driveren:kunne ikke finde driveren

  3. mysql hvor streng ender med tal

  4. SELECT COUNT(*) AS count - Sådan bruges denne optælling