共用方式為


作法:藉由保留資料庫值來解決衝突

若要先協調預期和實際資料庫值之間的差異再重新送出變更,可以使用 OverwriteCurrentValues 將找到的值保留在資料庫中。 這樣會覆寫物件模型 (Object Model) 中的目前值。 如需詳細資訊,請參閱開放式同步存取:概觀

注意

在所有情況下,擷取資料庫中更新過的資料會先重新整理用戶端上的資料錄。 這個動作可確保下一次嘗試更新時,不會在相同的並行存取檢查時失敗。

範例

在這個案例下,當 User1 嘗試送出變更時,因為 User2 同時變更了 Assistant 和 Department 資料行,所以會擲回 ChangeConflictException 例外狀況。 下表顯示這個情況。

州/省 管理員 小幫手 部門
User1 和 User2 查詢時的原始資料庫狀態。 Alfreds Maria Sales
User1 準備送出這些變更。 Alfred 行銷
User2 已送出這些變更。 Mary 服務

User1 決定讓較新的資料庫值覆寫物件模型中的目前值,來解決這個衝突。

User1 使用 OverwriteCurrentValues 解決衝突時,資料庫中的結果會如同下表:

州/省 管理員 小幫手 部門
解決衝突後的新狀態。 Alfreds

(原始)
Mary

(來自 User2)
服務

(來自 User2)

下列範例程式碼顯示如何使用資料庫值來覆寫物件模型中的目前值 (但不會對個別成員衝突進行任何檢查或自訂處理)。

Northwnd db = new Northwnd("...");
try
{
    db.SubmitChanges(ConflictMode.ContinueOnConflict);
}

catch (ChangeConflictException e)
{
    Console.WriteLine(e.Message);
    foreach (ObjectChangeConflict occ in db.ChangeConflicts)
    {
        // All database values overwrite current values.
        occ.Resolve(RefreshMode.OverwriteCurrentValues);
    }
}
Dim db As New Northwnd("...")

Try
    db.SubmitChanges(ConflictMode.ContinueOnConflict)

Catch ex As ChangeConflictException
    Console.WriteLine(ex.Message)

    For Each occ As ObjectChangeConflict In db.ChangeConflicts
        ' All database values overwrite current values.
        occ.Resolve(Data.Linq.RefreshMode.OverwriteCurrentValues)
    Next

End Try

另請參閱