sql >> Databasteknik >  >> RDS >> Sqlserver

LINQ + TransactionScope kommer inte att ändra isoleringsnivå i SQL Server Profiler

Det beror på hur du skapade transaktionen.

Om du körde inline SQL för att starta den (t.ex. BEGIN TRAN ), kommer L2S inte att vara medveten om transaktionen och kommer att skapa en ny kapslad i READ COMMITTED .

Men om du använde System.Transaction eller har en transaktion inställd på din DataContext , SubmitChanges kommer att delta i den transaktionen.

Du kan se dessa transaktioner starta och stoppa i Profiler om du väljer TM: Begin Tran och TM: Commit Tran evenemangsklasser.

Obs:ADO.Net utfärdar inte BEGIN TRAN Det utfärdar inte heller SET TRANSACTION ISOLATION i partier görs detta på en lägre nivå.

Om du verkligen vill bekräfta beteendet, skapa en trigger på en tabell som infogar den aktuella isoleringsnivån i en loggningstabell och kontrollera den.

Du kan hämta din nuvarande isoleringsnivå genom att köra:

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. Lagring av binära datatyper i SQL Server

  2. Fyll i datamängd med tabellnamn från lagrad procedur

  3. Terminalen känner inte igen mysqld och mysql kommandon

  4. hur man endast väljer unika värden från relaterade tabeller