Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

LINQ + TransactionScope няма да промени нивото на изолация в SQL Server Profiler

Зависи как сте създали транзакцията.

Ако сте изпълнили вграден SQL, за да го стартирате (НАПР. BEGIN TRAN ), L2S няма да знае за транзакцията и ще завърти нова вложена в READ COMMITTED .

Ако обаче сте използвали System.Transaction или имате зададена транзакция във вашия DataContext , SubmitChanges ще участва в тази транзакция.

Можете да видите как тези транзакции започват и спират в Profiler, ако изберете TM: Begin Tran и TM: Commit Tran класове за събития.

Забележка:ADO.Net не издава BEGIN TRAN нито издава SET TRANSACTION ISOLATION в партидите това се прави на по-ниско ниво.

Ако винаистина искате да потвърдите поведението, създайте тригер на таблица, която вмъква текущото ниво на изолация в таблица за регистриране и го проверете.

Можете да вземете текущото си ниво на изолация, като изпълните:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server DateDiff срещу .Net DateDiff

  2. Неправилен синтаксис близо до ')', извикващ съхранена процедура с GETDATE

  3. Обединете две различни таблици с поле за първичен идентификатор

  4. Инсталирайте SQL Server 2016

  5. Как един сървър обработва заявки за уеб услуги от множество клиенти