【发布时间】:2011-04-24 02:26:01
【问题描述】:
我使用以下格式使用 linq 提交对我的数据库的更改。
Begin Transaction (Scope Serialized, Required)
Check Business Rule 1...N
MyDataContext.SubmitChanges()
Save Changes Done In Previous Query To Log File
End Transaction Scope
但在 SQL Server 分析器中,我在 Connection:Start 中看到以下行。
set transaction isolation level read committed
我经历了这个 (http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/93a45026-0425-4d49-a4ac-1b882e90e6d5) 并认为我有答案;
直到我在 Microsoft Connect 上看到 (https://connect.microsoft.com/VisualStudio/feedback/details/565441/transactionscope-linq-to-sql?wa=wsignin1.0)。
谁能告诉我我的代码实际上是在序列化隔离级别下执行的,还是实际上只是在读取提交下运行?
【问题讨论】:
-
我倾向于相信您在 Profiler 中看到的内容...
-
但是其中一篇文章也说profiler只显示连接开始时的隔离级别,:S
-
我应该查找哪些语句?我发现了一些非常有趣的东西,Audit:Login statemnts immidiatly after the above query has set transaction isolation level serializable,但是到那时我想在序列化隔离中执行的查询已经被执行了。
-
@Mitch,稍微微妙一点,我也无法分辨
TM: Begin Tran中 tran 的隔离级别,但我可能缺少一列 -
@Mitch,虽然我经常使用 Profiler 来查看数据库级别真正发生了什么,在这种情况下,来自 Profiler 的
Audit Login语句将显示隔离级别在设置之前。很难在 Profiler 中查看隔离级别的设置(如 divega 的 cmets 中所述,entityframework.codeplex.com/workitem/1712)。要确定地知道,请查看 sys.dm_exec_session 视图中的会话记录。 Sam 提到了一种方法来做到这一点。你会发现 Profiler 上报的Audit Login经常与当前隔离级别不匹配。
标签: linq-to-sql sql-server-2008 transactions sql-server-profiler isolation-level