Bagikan melalui


Cara: Menyelesaikan Konflik dengan Mempertahankan Nilai Database

Untuk menyesuaikan perbedaan antara nilai database yang diharapkan dan aktual sebelum Anda mencoba mengirim ulang perubahan, Anda dapat menggunakan OverwriteCurrentValues untuk mempertahankan nilai yang ditemukan di database. Nilai saat ini dalam model objek kemudian ditimpa. Untuk informasi selengkapnya, lihat Konkurensi Optimis: Gambaran Umum.

Catatan

Dalam semua kasus, catatan pada klien pertama-tama direfresh dengan mengambil data yang diperbarui dari database. Tindakan ini memastikan bahwa percobaan pembaruan berikutnya tidak akan gagal pada pemeriksaan konkurensi yang sama.

Contoh

Dalam skenario ini, pengecualian ChangeConflictException dimunculkan saat User1 mencoba mengirim perubahan, karena User2 saat itu telah mengubah kolom Asisten dan Departemen. Tabel berikut menunjukkan situasinya.

Provinsi Manajer Asisten Departemen
Status database asli saat dikueri oleh User1 dan User2. Alfreds Maria Sales
User1 bersiap untuk mengirim perubahan ini. Alfred Marketing
User2 telah mengirim perubahan ini. Mary Layanan

User1 memutuskan untuk menyelesaikan konflik ini dengan membuat nilai database yang lebih baru menimpa nilai saat ini dalam model objek.

Ketika User1 menyelesaikan konflik menggunakan OverwriteCurrentValues, hasilnya di database adalah sebagai berikut dalam tabel:

Provinsi Manajer Asisten Departemen
Status baru setelah resolusi konflik. Alfreds

(asli)
Mary

(dari User2)
Layanan

(dari User2)

Kode contoh berikut menunjukkan cara menimpa nilai saat ini dalam model objek dengan nilai database. (Tidak ada pemeriksaan atau penanganan kustom dari konflik masing-masing anggota yang terjadi.)

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

Lihat juga