也許這是一個真正的小問題,因爲我對於處理與PetaPoco的交易相當新。 問題我正在使用PATA作爲一個microORM來處理我的數據庫事務,如果我在事務的.Complete()方法之前拋出一個異常,所有事情都會正確回滾,但如果我在PetaPoco交易不回滾
內部捕獲異常Using scope As PetaPoco.Transaction = db.GetTransaction()
' try/catch here and if the db command fails transaction won't roll back
scope.Complete()
End Using
如果某個數據庫操作失敗,事務將不會回滾。我該如何解決這個問題?
我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –
我不熟悉PetaPoco交易。但是,快速查看PetaPoco的代碼,事務管理在Microsoft環境中似乎很有趣並且坦率地說是無用的。你爲什麼不用一個標準的TransactionScope使用語句來包圍你的事務代碼(就像這樣:http://msdn.microsoft.com/library/ee818746.aspx),它對於大多數標準數據庫來說應該是正常的。 –
謝謝西蒙,我覺得petapoco在底層使用的是這個對象infact,即使是petapoco,你也不能「手動」回滾事務,但它的工作原理就像「如果你想回滾一個事務,你不應該調用Complete方法例如,你可以在範圍內拋出異常,它參與的事務將被回滾。「 但由於某種原因,我試圖不叫.Compete(),但第一個數據庫查詢成功了相同。順便說一句,我會給一個普通的.NET方法一個鏡頭,並在這裏報告。 – Manight