Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

LINQ + TransactionScope ne changera pas le niveau d'isolement dans SQL Server Profiler

Cela dépend de la façon dont vous avez créé la transaction.

Si vous avez exécuté SQL en ligne pour le commencer (par exemple, BEGIN TRAN ), L2S ne sera pas au courant de la transaction et en lancera une nouvelle imbriquée dans READ COMMITTED .

Cependant, si vous avez utilisé System.Transaction ou si vous avez défini une transaction sur votre DataContext , SubmitChanges participera à cette transaction.

Vous pouvez voir ces transactions démarrer et s'arrêter dans Profiler si vous choisissez le TM: Begin Tran et TM: Commit Tran cours événementiels.

Remarque :ADO.Net n'émet pas BEGIN TRAN il n'émet pas non plus SET TRANSACTION ISOLATION par lots, cela se fait à un niveau inférieur.

Si vous vraiment souhaitez confirmer le comportement, créez un déclencheur sur une table qui insère le niveau d'isolement actuel dans une table de journalisation et vérifiez-le.

Vous pouvez récupérer votre niveau d'isolement actuel en exécutant :

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