C#中的事務(wù)管理
TransactionScope是一個(gè)類(lèi),該類(lèi)在一定時(shí)間后進(jìn)行代碼塊事務(wù)。不能繼承此類(lèi)的事務(wù),即系統(tǒng)和事務(wù)。
事務(wù)管理對(duì)于任何企業(yè)無(wú)縫地運(yùn)行其業(yè)務(wù)應(yīng)用程序都至關(guān)重要。它像.NET Framework版本2一樣在版本之間變化,它使用TransactionScope類(lèi)提供對(duì)自己的事務(wù)組件的管理。TransactionScope是一類(lèi)系統(tǒng)。它也可以稱(chēng)為事務(wù)命名空間。TransactionScope類(lèi)支持來(lái)自代碼塊的事務(wù),這就是為什么它在.NET開(kāi)發(fā)框架中起關(guān)鍵作用的原因。TransactionScope非常簡(jiǎn)單,健壯且易于實(shí)現(xiàn),因此它在.NET開(kāi)發(fā)人員中非常受歡迎。在此博客中,我們將介紹圍繞.net開(kāi)發(fā)人員的Transactionscope的所有方面。
System.Transactions
System.Transactions允許您使用此命名空間class.system中提供的類(lèi)來(lái)創(chuàng)建,注冊(cè)和控制自己的Transactional應(yīng)用程序。交易是在.Net 2.0版中引入的,它是創(chuàng)建和允許用戶參與本地或分布式參與一個(gè)或多個(gè)參與者的交易的重要設(shè)計(jì)目標(biāo)之一。
交易范圍
您可能想知道什么是TransactionScope,所以它與事務(wù)的名稱(chēng)Scope完全一樣。TransactionScope是一個(gè)類(lèi),該類(lèi)在一定時(shí)間后進(jìn)行代碼塊事務(wù)。不能繼承此類(lèi)的事務(wù),即系統(tǒng)和事務(wù)。TransactionScope提供了一個(gè)絕對(duì)的編程模型,在該模型中,基礎(chǔ)結(jié)構(gòu)本身可以自動(dòng)管理事務(wù)。TransactionScope降低了代碼的復(fù)雜性,因此在定制軟件開(kāi)發(fā)中被廣泛接受和使用。。TransactionScope將代碼塊作為事務(wù)的一部分,而無(wú)需c#開(kāi)發(fā)人員在事務(wù)本身內(nèi)部進(jìn)行連接。允許TransactionScope自動(dòng)選擇和管理交易環(huán)境。由于其易于訪問(wèn)和效率,因此在事務(wù)處理應(yīng)用程序中強(qiáng)烈建議使用TransactionScope類(lèi)。
TransactionScope
TransactionScope由TransactionScope類(lèi)的對(duì)象創(chuàng)建。要?jiǎng)?chuàng)建TransactionScope類(lèi)的對(duì)象,使用“ using”語(yǔ)句。我們可以通過(guò)檢查C#和Visual Basic中都可用的'using'語(yǔ)句來(lái)檢查范圍是否被正確處置,它就像一個(gè)“ try ... finally”塊。
為了完成TransactionScope,使用Complete方法。在事務(wù)中,當(dāng)所有任務(wù)都由應(yīng)用程序完成時(shí),用戶可以使用特殊命令來(lái)提交事務(wù)。通過(guò)執(zhí)行“ Complete method”(完整方法)以使事務(wù)管理器了解成功的事務(wù),在整個(gè)會(huì)話期間只能調(diào)用一次此命令。
如果未在整個(gè)應(yīng)用程序中調(diào)用此方法,則事務(wù)管理器將其解釋為T(mén)ransactionScope內(nèi)引發(fā)的異常或系統(tǒng)故障,并中止事務(wù)。即使發(fā)生異常,也可以通過(guò)“ using”語(yǔ)句確保是否調(diào)用TransactionScope的Dispose方法。取消Dispose方法后,如果發(fā)生異常,則可能不會(huì)影響事務(wù)。處置方法還嘗試通過(guò)事務(wù)恢復(fù)環(huán)境變化并將其轉(zhuǎn)換為以前的狀態(tài)。
C#開(kāi)發(fā)中的TransactionScope默認(rèn)屬性
TransactionScope具有三個(gè)非常重要的默認(rèn)屬性,讓我們簡(jiǎn)要討論每個(gè)屬性。
隔離度
事務(wù)的隔離級(jí)別,指定事務(wù)完成之前其他事務(wù)對(duì)易失性數(shù)據(jù)的訪問(wèn)級(jí)別。您可以在創(chuàng)建事務(wù)時(shí)指出適用于事務(wù)的隔離級(jí)別。通常,執(zhí)行事務(wù)時(shí),其隔離級(jí)別設(shè)置為靈活級(jí)別以進(jìn)行序列化。其他隔離級(jí)別通常用于讀取密集型系統(tǒng)。在不同的隔離級(jí)別下,使用讀和寫(xiě)鎖的方式是不同的。
默認(rèn)值:可序列化
可用選項(xiàng):可序列化,已提交讀,未提交讀,可重復(fù)讀
超時(shí)
用于控制事務(wù)超時(shí)的Timeout屬性。C#開(kāi)發(fā)人員可以通過(guò)將超時(shí)設(shè)置為零來(lái)設(shè)置無(wú)限超時(shí)。如果您正在調(diào)試,則無(wú)限超時(shí)非常有用。
默認(rèn)值:1分鐘
可用選項(xiàng):最多10分鐘
TransactionScope選項(xiàng)
TransactionScopeOption是一個(gè)枚舉,它提供用于創(chuàng)建TransactionScope的其他選項(xiàng)。TransactionScope具有三個(gè)TransactionScopeOption。
必需:如果使用' Required '選項(xiàng)實(shí)例化了范圍,并且如果存在環(huán)境事務(wù),那么該范圍將加入該事務(wù),如果不存在環(huán)境事務(wù),則新事務(wù)將由范圍創(chuàng)建并成為根范圍。
RequiresNew:如果使用' RequiresNew '實(shí)例化范圍,則該范圍將始終成為根范圍。在新環(huán)境中,事務(wù)將采取不同的行動(dòng),并變成新的環(huán)境事務(wù)。
抑制:如果作用域使用'Suppress'實(shí)例化,則它永遠(yuǎn)不會(huì)參與事務(wù)。具有此值的TransactionScope的環(huán)境事務(wù)始終為null。
默認(rèn)值:必需
可用選項(xiàng):必填,RequiresNew,Suppress
使用TransactionScope
現(xiàn)在,當(dāng)您使用ADO.NET創(chuàng)建或使用事務(wù)時(shí),只需在事務(wù)對(duì)象上進(jìn)行提交或回滾即可。如果您忘記提交或回滾事務(wù),則可能會(huì)導(dǎo)致問(wèn)題,并且可能會(huì)丟失數(shù)據(jù)或出現(xiàn)不一致的數(shù)據(jù)問(wèn)題。這些問(wèn)題可以通過(guò)使用TransactionScope來(lái)解決。
在事務(wù)中使用TransactionScope時(shí),對(duì)于c#開(kāi)發(fā)人員,沒(méi)有用于提交和回滾事務(wù)的手動(dòng)選項(xiàng)。如果發(fā)生異常,操作將自動(dòng)回滾,并將在catch塊中捕獲異常。
一旦調(diào)用TransactionScope對(duì)象的Complete方法,事務(wù)將提交。因此,在電源故障,系統(tǒng)崩潰或硬件故障的情況下,TransactionScope會(huì)認(rèn)為事務(wù)中發(fā)生異常,并且TransactionScope塊內(nèi)的所有事務(wù)都會(huì)自動(dòng)回滾。
TransactionScope可用于維護(hù)多個(gè)數(shù)據(jù)庫(kù)以及具有多個(gè)連接字符串的單個(gè)數(shù)據(jù)庫(kù)。
使用TransactionScope時(shí),無(wú)需在中間關(guān)閉任何數(shù)據(jù)庫(kù)連接。
由于所有這些優(yōu)點(diǎn)和易于訪問(wèn)的特性,因此在創(chuàng)建事務(wù)性應(yīng)用程序時(shí),TransactionScope很受歡迎。
結(jié)論
我們創(chuàng)建此博客的目的是闡明Transaction和TransactionScope的創(chuàng)建和使用。它提供了從代碼端處理事務(wù)的最佳方法。它比其他事務(wù)處理方法更易于使用和簡(jiǎn)化。使用TransactionScope,您可以用更少的代碼處理事務(wù),因?yàn)槟鸁o(wú)需編寫(xiě)多個(gè)語(yǔ)句,從而可以提高代碼的可讀性和效率。
