2013-09-30 50 views
0

我有一個在我的應用程序中創建TransactionScope的實用方法。獲取當前的.net TransactionScope IsolationLevel

我想做一個單元測試來驗證返回的TransactionScope具有正確的IsolationLevel集合,以確保沒有人能夠修改代碼而不破壞測試。

System.Transactions.Transaction作用域沒有公開屬性暴露這樣的信息。 (http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx

任何獲取此信息的方法?

回答

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

+0

我的單元測試不涉及任何後端運行。 –

+0

所以我不確定你想要單元測試...你在嘲笑數據庫連接? – Szymon

+0

我有一個實用的方法,返回一個TransactionScope與一些硬編碼設置,如超時值和隔離級別。 我想單元測試驗證返回的TransactionScope實例是否正確構造。這是一個失敗的安全措施,以確保如果有人對此代碼進行了一些修改,測試將會中斷。 –