提到數據庫操作特別是企業級的數據庫應用就不得不提一個多人操作時經常會產生的問題——並發沖突本文首先來看一下什麼是並發沖突傳統的並發沖突有現有的處理方式最後結合EF看一個處理並發沖突的實例
一要完成本文中的實例您需要作如下准備
將Visual Studio 及NET Framework 升級到SP點擊轉到升級地址
安裝SQL SERVER VS 中自帶的EXPRESS版的SQL SERVER應該也可以用
載並附加數據庫點擊下載DemoDbV
創建一個VB Console Application並且取一個合適的名字(例如Concurrency之類的)注意目標Framework要設置成版
二什麼是並發沖突
讓我們來看一個跟取款相關的例子某年某月某日某時某分老王在A取款機取錢他兒子小王同時在B取款機取錢(不要問我為什麼這麼巧^_^)他倆從同一個賬號上取於是就發生了如下一序列的操作
A取款機向中央數據庫提問這賬上還有多少錢?
B取款機向中央數據庫詢問這賬上還有多少錢?
中央數據庫回答A取款機W
中央數據庫回答B取款機W
然後老王對A取款機說我要取出W
同時小王對B取款機說我要取出W
A取款機就算了一下WW=W>於是就吐出W現金給了老王並且准備告訴中央數據庫現在還剩W啦但是就在它告訴中央數據庫之前發生了以下的事情
B取款機計算了一下W(此時它還不知道余額已經成W了因為A取款機還沒有告訴中央數據庫)減去W等於W大於於是就吐出W現金給了小王然後它當然也要知會中央數據庫
中央數據庫於是收到A取款機的消息說這個賬號還剩W於是刷新余額為W然後又收到B取款機說還剩W於是就刷新余額為W
呵呵於是小王+老王的賬戶裡一共存有W元結果老王取了W元小王取了W元賬戶裡卻還剩了W元!
這就是一種並發沖突由於同一時間有兩個或者多個端在對同一數據進行操作從而導致數據發生了錯誤如果取款機真的以這樣的方式來處理並發那麼我現在就不寫這片文章了——趕緊發動全家對表說好了在某一時刻同時取錢去
三常見的並發沖突處理方式
一般來說我們把並發沖突處理方式歸結為類
第一類放任不管方式第二類開放式並發處理方式第三類保守式並發處理方式
[] [] [] []
From:http://tw.wingwit.com/Article/program/net/201311/14742.html