sql >> Databáze >  >> RDS >> Sqlserver

LINQ + TransactionScope nezmění úroveň izolace v SQL Server Profiler

Záleží na tom, jak jste transakci vytvořili.

Pokud jste pro zahájení spustili inline SQL (např. BEGIN TRAN ), L2S nebude vědět o transakci a vytvoří novou vnořenou v READ COMMITTED .

Pokud jste však použili System.Transaction nebo máte transakci nastavenou v DataContext , SubmitChanges se této transakce zúčastní.

Pokud zvolíte TM: Begin Tran, můžete tyto transakce spouštět a zastavovat v Profileru a TM: Commit Tran třídy událostí.

Poznámka:ADO.Net nevydává BEGIN TRAN ani nevydává SET TRANSACTION ISOLATION v dávkách se to provádí na nižší úrovni.

Pokud opravdu chcete potvrdit chování, vytvořte na tabulce spouštěč, který vloží aktuální úroveň izolace do tabulky protokolování a zkontrolujte ji.

Aktuální úroveň izolace můžete získat spuštěním:

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. Rychlejší způsob výběru před a po vybraném řádku

  2. Jak přeformátovat hodnoty data sloupce MySQL?

  3. log vložení/aktualizace/smazání v databázi Oracle

  4. Jak zkontrolovat, zda se vložení nezdaří?