获取当前的.net TransactionScope IsolationLevel

时间:2013-09-30 20:00:05

标签: .net transactionscope isolation-level

我有一个在我的应用程序中创建TransactionScope的实用工具方法。

我想进行单元测试以验证返回的TransactionScope是否具有正确的IsolationLevel设置,以确保没有人可以在不破坏测试的情况下修改代码。

System.Transactions.Transaction范围没有公开这样的信息的公共属性。 (http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx

获取此信息的任何方式?

1 个答案:

答案 0 :(得分:2)

您可以运行SQL查询来检查隔离级别:

SELECT CASE transaction_isolation_level 
WHEN 0 THEN 'Unspecified' 
WHEN 1 THEN 'ReadUncomitted' 
WHEN 2 THEN 'Readcomitted' 
WHEN 3 THEN 'Repeatable' 
WHEN 4 THEN 'Serializable' 
WHEN 5 THEN 'Snapshot' END AS IsolationLevel 
FROM sys.dm_exec_sessions 
where session_id = @@SPID

修改

根据下面的评论,还有一种从代码中获取隔离级别的方法。这可能是这样的:

using (TransactionScope scope = new TransactionScope())
{
    using (SqlConnection connection1 = new SqlConnection("Data Source=localhost;Integrated Security=True"))
    {
        Transaction trans = Transaction.Current;
        System.Transactions.IsolationLevel level = trans.IsolationLevel;
    }
}

您可以致电Transaction.Current来获取当前交易。

来源:Implementing an Implicit Transaction using Transaction Scope