Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Değişikliklerinizi yeniden göndermeye çalışmadan önce beklenen ve gerçek veritabanı değerleri arasındaki farkları mutabık tutmak için, veritabanında bulunan değerleri korumak için kullanabilirsiniz OverwriteCurrentValues . Nesne modelindeki geçerli değerlerin üzerine yazılır. Daha fazla bilgi için bkz . İyimser Eşzamanlılık: Genel Bakış.
Not
Her durumda, istemcideki kayıt önce veritabanından güncelleştirilmiş veriler alınarak yenilenir. Bu eylem, sonraki güncelleştirme denemesinin aynı eşzamanlılık denetimlerinde başarısız olmamasını sağlar.
Örnek
Bu senaryoda, User1 değişiklikleri göndermeye çalıştığında bir ChangeConflictException özel durum oluşur çünkü Kullanıcı2 bu sırada Yardımcı ve Bölüm sütunlarını değiştirmiştir. Aşağıdaki tabloda durum gösterilmektedir.
| Durum | Yönetici | Yardımcı | Bölüm |
|---|---|---|---|
| User1 ve User2 tarafından sorgulandığında özgün veritabanı durumu. | Alfreds | Maria | Sales |
| User1 bu değişiklikleri göndermeye hazırlanır. | Alfred | Pazarlama | |
| User2 bu değişiklikleri zaten gönderdi. | Mary | Hizmet |
Kullanıcı1, daha yeni veritabanı değerlerinin nesne modelindeki geçerli değerlerin üzerine yazılmasını sağlayarak bu çakışmayı çözmeye karar verir.
User1 kullanarak OverwriteCurrentValuesçakışmayı çözdiğinde veritabanındaki sonuç tabloda aşağıdaki gibidir:
| Durum | Yönetici | Yardımcı | Bölüm |
|---|---|---|---|
| Çakışma çözümü sonrası yeni durum. | Alfreds (özgün) |
Mary (Kullanıcı2'den) |
Hizmet (Kullanıcı2'den) |
Aşağıdaki örnek kod, nesne modelindeki geçerli değerlerin veritabanı değerleriyle nasıl üzerine yazılmasını gösterir. (Tek tek üye çakışmalarının incelenmesi veya özel işlenmesi gerçekleşmez.)
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