在這個案例下,因為 User2 同時變更了 Assistant 和 Department 資料行,所以 User1 嘗試送出變更時會擲回 ChangeConflictException 例外狀況。下表顯示這個情況。
| | 主管 | 助理 | 部門 |
| User1 和 User2 查詢時的原始資料庫狀態。 | Alfreds | Maria | Sales |
| User1 準備送出這些變更。 | Alfred | | Marketing |
| User2 已送出這些變更。 | | Mary | Service |
User1 決定合併資料庫值與目前用戶端成員值,來解決這個衝突。這樣只有在目前變更集也修改該值時,才會覆寫資料庫值。
User1 使用 KeepChanges 解決衝突時,資料庫中的結果會如同下表:
| | 主管 | 助理 | 部門 |
| 解決衝突後的新狀態。 | Alfred (來自 User1) | Mary (來自 User2) | Marketing (來自 User1) |
下列範例顯示如何合併資料庫值與目前用戶端成員值 (除非用戶端也變更該值)。但不會對個別成員衝突進行任何檢查或自訂處理。
Try
db.SubmitChanges(ConflictMode.ContinueOnConflict)
Catch ex As ChangeConflictException
Console.WriteLine(ex.Message)
For Each occ As ObjectChangeConflict In db.ChangeConflicts
' Automerge database values into current for members
' that client has not modified.
occ.Resolve(Data.Linq.RefreshMode.KeepChanges)
Next
End Try
' Submit succeeds on second try.
db.SubmitChanges(ConflictMode.FailOnFirstConflict)
try
{
db.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException e)
{
Console.WriteLine(e.Message);
// Automerge database values for members that client
// has not modified.
foreach (ObjectChangeConflict occ in db.ChangeConflicts)
{
occ.Resolve(RefreshMode.KeepChanges);
}
}
// Submit succeeds on second try.
db.SubmitChanges(ConflictMode.FailOnFirstConflict);