2

我有以下代码创建一个可序列化的事务。该应用程序按预期工作:

using (var tx = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable, Timeout = new TimeSpan(0, 2, 0) }))
{
  // Modify database using EF.
  tx.Complete();
}

但是,分析数据库让我有些困惑。

// Start of transaction (and the first query). Login has invalid ISO LEV.
Audit Login       ... set transaction isolation level read committed ...
SQLTransaction    0 - Begin
RPC:Completed     exec sp_executesql N'SELECT TOP (1)... 

// Second query in transaction. Login now has valid ISO LEV.
Audit Logout
RPC:Completed     exec sp_reset_connection
Audit Login       ... set transaction isolation level read serializable ...
RPC:Completed     exec sp_executesql N'SELECT TOP (1)... 

由于我可以看到第一个查询实际上是在可序列化下执行的(我可以从它获取的锁中推断出这一点),我可以得出的唯一理由是 Audit Login 只是在登录时声明了 SPID 的 ISO 级别,并且不是它正在改变它。

如果是这样,那么触发 ISO 更改的事件在哪里?我已打开所有事件,但什么都看不到...

4

1 回答 1

1

更改事务隔离级别不是RPC:Completed事件。

仔细检查您是否正在监视SQL:BatchStartingSQL:BatchCompleted事件。

于 2013-01-04T16:08:02.663 回答