Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

LINQ + TransactionScope não alterará o nível de isolamento no SQL Server Profiler


Depende de como você criou a transação.

Se você executou o SQL embutido para iniciá-lo (por exemplo, BEGIN TRAN ), o L2S não estará ciente da transação e criará uma nova aninhada em READ COMMITTED .

No entanto, se você usou System.Transaction ou tem uma transação definida em seu DataContext , SubmitChanges participará dessa transação.

Você pode ver essas transações começando e parando no Profiler se você escolher o TM: Begin Tran e TM: Commit Tran aulas de eventos.

Nota:ADO.Net não emite BEGIN TRAN nem emite SET TRANSACTION ISOLATION em lotes, isso é feito em um nível inferior.

Se você realmente deseja confirmar o comportamento, crie um gatilho em uma tabela que insira o nível de isolamento atual em uma tabela de log e verifique-o.

Você pode pegar seu nível de isolamento atual executando:
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