首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

LINQ to SQL 開放式並發控制與交易完整實戰(10):衝突偵測、解決策略與 ChangeConflictException 處理

     編輯:關於ASP.NET

LINQ to SQL 內建開放式並發控制,透過時間戳或欄位比較偵測衝突,提供彈性解決機制。

核心術語

術語說明
並發多用戶同時更新同一資料列
並發衝突提交值相互衝突
開放式並發控制提交前檢查資料是否被他人修改,不鎖定資源
衝突解決重新查詢刷新,協調差異

衝突發生條件

  1. 客戶端嘗試 SubmitChanges()
  2. 資料庫中更新檢查值(TimeStamp 或所有欄位)自上次讀取後已變更

實戰範例:模擬並發衝突

// 模擬另一用戶先更新
var otherDb = new NorthwindDataContext();
var otherProduct = otherDb.Products.First(p => p.ProductID == 1);
otherProduct.UnitPrice = 999.99M;
otherDb.SubmitChanges();

// 當前用戶嘗試更新
var product = db.Products.First(p => p.ProductID == 1);
product.UnitPrice = 777.77M;

try {
    db.SubmitChanges(); // 拋出 ChangeConflictException
}
catch (ChangeConflictException) {
    // 處理衝突
}

衝突解決模式

// 1. 保留資料庫值(捨棄本地變更)
db.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);

// 2. 保留本地值(強制覆蓋)
db.ChangeConflicts.ResolveAll(RefreshMode.KeepCurrentValues);

// 3. 合併(僅衝突欄位保留資料庫值,非衝突欄位保留本地值)
db.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges);

實體類別標註

在欄位屬性加入 [Column(IsVersion=true)] 使用 TimeStamp,或 [Column(UpdateCheck=UpdateCheck.WhenChanged)] 指定檢查模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved