gpt4 book ai didi

sql-server - Entity Framework : how to find transaction isolation level in SQL Profiler?

转载 作者:行者123 更新时间:2023-12-02 11:43:29 25 4
gpt4 key购买 nike

BeginTransaction 方法用于管理 Entity Framework 6 中的事务。它允许设置事务的隔离级别,如下面的代码所示(仅是示例):

using (var context = new DataContext())
{
using (var transaction = context.Database.BeginTransaction(IsolationLevel.Serializable))
{
context.Entities.Add(new Entity());

context.SaveChanges();

transaction.Commit();
}
}

问题是:当我使用 SQL Server Profiler 时,我找不到任何有关真实 SQL 事务隔离级别的信息。

尝试#1:

我尝试跟踪所有类型的事件,并在跟踪结果中通过“隔离”关键字进行搜索。我只找到两个事件:

EventClass          TextData
-------------------------------------------------------------
ExistingConnection set transaction isolation level read committed
AuditLogin set transaction isolation level read committed

READ COMMITTED 始终出现在这些事件中。所以这与我的代码无关,因为 IsolationLevel.Serialized 是在上面设置的。

尝试#2:

对于已启动但尚未提交的事务,可以获取 SPID 并从 dm_exec_sessions View 中手动选择真正的隔离级别:

SELECT transaction_isolation_level
FROM sys.dm_exec_sessions
WHERE session_id = @Tran_SPID

这是非常不可取的方式。

是否可以直接在探查器中记录任何 EF 生成的事务/ session 的隔离级别?也许我只是使用了错误的工具?

附注内置 Entity Framework 6.1.3 和 MS SQL Server 2012。

最佳答案

您无法在探查器中找到事务隔离级别,因为它从未被记录。请参阅How to monitor transaction isolation level changes in SQL Profiler or in any other tool进行解释。

关于sql-server - Entity Framework : how to find transaction isolation level in SQL Profiler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31412728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com