【问题标题】:Get current .net TransactionScope IsolationLevel获取当前的 .net TransactionScope IsolationLevel
【发布时间】:2013-10-06 19:38:30
【问题描述】:

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

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

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

有什么方法可以得到这些信息?

【问题讨论】:

    标签: .net transactionscope isolation-level


    【解决方案1】:

    您能否运行 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
    

    编辑

    基于下面的 cmets,还有一种方法可以从代码中获取隔离级别。这可能是这样的:

    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

    【讨论】:

    • 所以我不确定你要单元测试什么...你在模拟数据库连接吗?
    • 我有一个实用方法,它返回一个带有一些硬编码设置(如超时值和隔离级别)的 TransactionScope。我想要一个单元测试来验证返回的 TransactionScope 实例是否正确构造。这是一个故障保险,可以确保如果有人对此代码进行了一些修改,测试就会中断。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多