Ily*_*kov 9 sql-server entity-framework transactions sql-server-2012 entity-framework-6
BeginTransaction 方法用于管理实体框架6中的事务.它允许为事务设置隔离级别,如下面的代码中所示(仅示例):
using (var context = new DataContext())
{
using (var transaction = context.Database.BeginTransaction(IsolationLevel.Serializable))
{
context.Entities.Add(new Entity());
context.SaveChanges();
transaction.Commit();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是:当我使用SQL Server Profiler时,我找不到任何有关真正SQL事务的隔离级别的信息.
我试图跟踪所有类型的事件,并在跟踪结果中通过"isolation"关键字进行搜索.我找到的只有两件事:
EventClass TextData
-------------------------------------------------------------
ExistingConnection set transaction isolation level read committed
AuditLogin set transaction isolation level read committed
Run Code Online (Sandbox Code Playgroud)
READ COMMITTED总是在这些事件中.所以它不是关于我的代码,因为IsolationLevel.Serializable设置在上面.
由于事务已经启动但尚未提交,因此可以SPID从dm_exec_sessions视图中手动选择实际隔离级别:
SELECT transaction_isolation_level
FROM sys.dm_exec_sessions
WHERE session_id = @Tran_SPID
Run Code Online (Sandbox Code Playgroud)
这是非常不受欢迎的方式.
是否可以直接在Profiler中记录任何EF生成的事务/会话的隔离级别?也许我只是使用错误的工具?
PS实体框架6.1.3和MS SQL Server 2012在船上.
| 归档时间: |
|
| 查看次数: |
1860 次 |
| 最近记录: |