事務逾時設定
可以通過TransactionOptions對象設定Timeout後作為參數在建立TransactionScope的時候傳進去設定事務的逾時。如果設定為0表示不限制時間,這種情況最好在調試中使用。
在範圍聯結環境事務但所指定的逾時值小於為該環境事務所設定的逾時值時,會在 TransactionScope 對象上強制實施較小的逾時值,並且該範圍必須在指定的嵌套時間內結束,否則會自動中止事務。如果嵌套範圍的逾時值大於環境事務的逾時值,則前者無效。
隔離等級設定
可以通過TransactionOptions對象設定IsolationLevel後作為參數在建立TransactionScope的時候傳進去設定事務的隔離等級,預設的隔離等級是Serializable。IsolationLevel是個枚舉,以下說明載錄自MSDN對其的說明。
| |
Chaos |
無法改寫隔離等級更高的事務中的暫止的變更。 |
| |
ReadCommitted |
不可以在事務期間讀取可變資料,但是可以修改它。 |
| |
ReadUncommitted |
可以在事務期間讀取和修改可變資料。 |
| |
RepeatableRead |
可以在事務期間讀取可變資料,但是不可以修改。可以在事務期間添加新資料。 |
| |
Serializable |
可以在事務期間讀取可變資料,但是不可以修改,也不可以添加任何新資料。 |
| |
Snapshot |
可以讀取可變資料。在事務修改資料之前,它驗證在它最初讀取資料之後另一個事務是否更改過這些資料。如果資料已被更新,則會引發錯誤。這樣使事務可擷取先前提交的資料值。 在嘗試提升以此隔離等級建立的事務時,將引發一個 InvalidOperationException,併產生錯誤資訊“Transactions with IsolationLevel Snapshot cannot be promoted”(無法提升具有 IsolationLevel 快照的事務)。 |
| |
Unspecified |
正在使用與指定隔離等級不同的隔離等級,但是無法確定該層級。如果設定了此值,則會引發異常。 |
在使用嵌套的 TransactionScope 對象時,如果要聯結環境事務,則必須將所有嵌套範圍配置為使用完全相同的隔離等級。如果嵌套的 TransactionScope 對象嘗試聯結環境事務但卻指定了不同的隔離等級,則會引發 ArgumentException。