【发布时间】:2013-01-04 15:59:47
【问题描述】:
我有以下创建可序列化事务的代码。该应用程序按预期工作:
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 更改的事件在哪里?我已开启所有事件,但什么都看不到...
【问题讨论】:
标签: sql-server sql-server-2008 entity-framework ado.net sql-server-profiler