您好,登錄后才能下訂單哦!
本篇內容介紹了“LINQ TO SQL分布式事務舉例分析”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
LINQ TO SQL,顧名思義,涉及到了數據庫操作。那么就會有一個事務的概念,例如,假設我們需要一次性插入兩個實體,但希望保證這兩個操作的完整性的話。
1. 隱式事務
其實,即便我們不寫代碼,LINQ TO SQL也會自動創建一個事務的。默認事務隔離級別為ReadCommitted
2. 顯式事務
我們也可以自己寫代碼,來明確地控制事務,默認事務隔離級別為ReadCommitted
3. LINQ TO SQL分布式事務
我們也可以使用TransactionScope對象,來定義LINQ TO SQL分布式事務。
注意:TransactionScope的默認隔離級別為可串行化,可能帶來并發鎖沖突問題。
***大概要談一下并發控制的問題:這個問題的出現就在于,某些時候,某個客戶端讀取到了數據,然后它斷開了,在本地修改;同時,另外一個客戶端也讀取到了數據,并且修改并提交了。此時,***個客戶端如果再進行更新,就應該是有所問題的。這就是所謂的并發問題。
LINQ TO SQL通過在submitchanges方法的時候指定ConflictMode來定義并發控制行為:
◆FailOnFirstConflict(默認的)
◆ContinueOnConflict
下面有一個例子,講解了并發沖突時繼續操作,并且對沖突項進行解決
var query = from p in ctx.Products where p.CategoryID == 1 select p; foreach (var p in query) p.UnitsInStock = Convert.ToInt16(p.UnitsInStock - 1); try { ctx.SubmitChanges(ConflictMode.ContinueOnConflict); } catch (ChangeConflictException) { foreach (ObjectChangeConflict cc in ctx.ChangeConflicts) { Product p = (Product)cc.Object; Reponse.Write(p.ProductID + " "); cc.Resolve(RefreshMode.OverwriteCurrentValues); // 放棄當前更新,所有更新以原先更新為準 } }
“LINQ TO SQL分布式事務舉例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。