我有一个在我的应用程序中创建TransactionScope的实用工具方法。
我想进行单元测试以验证返回的TransactionScope是否具有正确的IsolationLevel设置,以确保没有人可以在不破坏测试的情况下修改代码。
System.Transactions.Transaction范围没有公开这样的信息的公共属性。 (http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx)
获取此信息的任何方式?
答案 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