程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> LINQ體驗(10)——LINQ to SQL語句之開放式並發控制和事務

LINQ體驗(10)——LINQ to SQL語句之開放式並發控制和事務

編輯:關於ASP.NET

從今天開始繼續這個系列。告訴大家一個好消息:微軟於2月1日發布了 Visual Studio Team System 2008 Team Suite簡體中文版,您可以在下載 Visual Studio Team System 2008 Team Suite簡體中文版90 天試用版。今天簡 單的學習下開放式並發控制和事務的內容,具體詳細的內容現在可以參看MSDN了 。

Simultaneous Changes開放式並發控制

下表介紹 LINQ to SQL 文 檔中涉及開放式並發的術語:

術語 說明 並發 兩個或更多用戶同時嘗試更新同一數據庫行 的情形。 並發沖突 兩個或更多用戶同時嘗試向一 行的一列或多列提交沖突值的情形。 並發控制 用 於解決並發沖突的技術。 開放式並發控制 先調查 其他事務是否已更改了行中的值,再允許提交更改的技術。相比之下,保守式並 發控制則是通過鎖定記錄來避免發生並發沖突。之所以稱作開放式控制,是因為 它將一個事務干擾另一事務視為不太可能發生。 沖突解決 通過重新查詢數據庫刷新出現沖突的項,然後協調差異的過程。刷新 對象時,LINQ to SQL 更改跟蹤器會保留以下數據:

 

最初從數據庫獲取 並用於更新檢查的值 通過後續查詢獲得的新數據庫值。

LINQ to SQL 隨 後會確定相應對象是否發生沖突(即它的一個或多個成員值是否已發生更改)。 如果此對象發生沖突,LINQ to SQL 下一步會確定它的哪些成員發生沖突。LINQ to SQL 發現的任何成員沖突都會添加到沖突列表中。

在 LINQ to SQL 對象模型中,當以下兩個條件都得到滿足時,就會發生“開 放式並發沖突”:客戶端嘗試向數據庫提交更改;數據庫中的一個或多個 更新檢查值自客戶端上次讀取它們以來已得到更新。此沖突的解決過程包括查明 對象的哪些成員發生沖突,然後決定您希望如何進行處理。

開放式並發 (Optimistic Concurrency)

說明:這個例子中在你讀取數據之前,另外一個 用戶已經修改並提交更新了這個數據,所以不會出現沖突。

//我 們打開一個新的連接來模擬另外一個用戶
NorthwindDataContext otherUser_db = new NorthwindDataContext();
var otherUser_product =
  otherUser_db.Products.First(p => p.ProductID == 1);
otherUser_product.UnitPrice = 999.99M;
otherUser_db.SubmitChanges();
//我們當前連接
var product = db.Products.First(p => p.ProductID == 1);
product.UnitPrice = 777.77M;
try
{
  db.SubmitChanges();//當前連接執行成 功
}
catch (ChangeConflictException)
{
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved