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.
LINQ to SQL iyimser eşzamanlılık denetimini destekler. Aşağıdaki tabloda LINQ to SQL belgelerinde iyimser eşzamanlılık için geçerli olan terimler açıklanmaktadır:
| Şartlar | Açıklama |
|---|---|
| Eşzamanlılık | Aynı anda iki veya daha fazla kullanıcının aynı veritabanı satırını güncelleştirmeye çalıştığı durum. |
| eşzamanlılık çakışması | Aynı anda iki veya daha fazla kullanıcının bir satırın bir veya daha fazla sütununa çakışan değerler göndermeye çalıştığı durum. |
| eşzamanlılık denetimi | Eşzamanlılık çakışmalarını çözmek için kullanılan teknik. |
| iyimser eşzamanlılık denetimi | Değişikliklerin gönderilmesine izin vermeden önce diğer işlemlerin bir satırdaki değerleri değiştirip değiştirmediğini ilk araştıran teknik. Eşzamanlılık çakışmalarını önlemek için kaydı kilitleyen kötümser eşzamanlılık denetimiyle karşıtlık. İyimser denetim, bir işlemin başka bir işlemi engelleme olasılığının düşük olma olasılığını göz önünde bulundurarak bu şekilde ifade edilir. |
| çakışma çözümü | Veritabanını yeniden sorgulayıp farklılıkları uzlaştırarak çakışan bir öğeyi yenileme işlemi. Bir nesne yenilendiğinde, LINQ to SQL değişiklik izleyicisi aşağıdaki verileri içerir: - Başlangıçta veritabanından alınan ve güncelleştirme denetimi için kullanılan değerler. - Sonraki sorgudaki yeni veritabanı değerleri. LINQ to SQL daha sonra nesnenin çakışıp çakışmadığını (yani bir veya daha fazla üye değerinin değişip değişmediğini) belirler. Nesne çakışıyorsa, LINQ to SQL bundan sonra hangi üyelerinin çakışmada olduğunu belirler. LINQ to SQL'in keşfettiği tüm üye çakışmaları bir çakışma listesine eklenir. |
LINQ to SQL nesne modelinde, aşağıdaki koşulların her ikisi de doğru olduğunda iyimser bir eşzamanlılık çakışması oluşur:
İstemci, değişiklikleri veritabanına göndermeye çalışır.
İstemci bunları en son okuduğundan beri veritabanında bir veya daha fazla güncelleme kontrol değeri güncellendi.
Bu çakışmanın çözümü, nesnenin hangi üyelerinin çakışmada olduğunu bulmayı ve ardından bu konuda ne yapmak istediğinize karar vermenizi içerir.
Uyarı
Yalnızca Always veya WhenChanged olarak eşlenen üyeler iyimser eşzamanlılık denetimlerine katılır. olarak işaretlenen Neverüyeler için bir denetim yapılmaz. Daha fazla bilgi için bkz. UpdateCheck.
Örnek
Örneğin, aşağıdaki senaryoda, Kullanıcı1 veritabanını bir satır için sorgulayarak bir güncelleştirme hazırlamaya başlar. User1, Alfreds, Maria ve Sales değerlerini içeren bir satır alır.
User1, Yönetici sütununun değerini Alfred ve Department sütununun değerini Pazarlama olarak değiştirmek istiyor. User1 bu değişiklikleri göndermeden önce, User2 veritabanına değişiklikler gönderdi. Bu nedenle artık Yardımcı sütununun değeri Mary, Department sütununun değeri ise Service olarak değiştirildi.
User1 artık değişiklikleri göndermeye çalıştığında gönderim başarısız olur ve bir ChangeConflictException özel durum oluşturulur. Bu sonuç, Yardımcı sütunu ve Departman sütunu için veritabanı değerleri beklenen değerler olmadığından oluşur. Yardımcı ve Departman sütunlarını temsil eden üyeler çelişki içinde. Aşağıdaki tabloda durum özetlemektedir.
| Devlet | Yönetici | Yardımcı | Departman |
|---|---|---|---|
| Özgün durum | Alfreds | Maria | Satışlar |
| Kullanıcı1 | Alfred | Pazarlama | |
| Kullanıcı2 | Meryem | Hizmet |
Bunun gibi çakışmaları farklı yollarla çözebilirsiniz. Daha fazla bilgi için bkz . Nasıl yapılır: Değişiklik Çakışmalarını Yönetme.
Çakışma Algılama ve Çözümleme Denetim Listesi
Çakışmaları herhangi bir ayrıntı düzeyinde algılayabilir ve çözebilirsiniz. Aşırı uç noktalardan birinde, tüm çakışmaları üç yoldan biriyle çözebilirsiniz (bkz RefreshMode. ) ek dikkate almadan. Diğer uç noktada, çakışma içindeki her üye üzerinde her çakışma türü için belirli bir eylem belirleyebilirsiniz.
Nesne modelinizdeki seçenekleri belirtin veya düzeltin UpdateCheck .
Daha fazla bilgi için bkz Nasıl yapılır: Eşzamanlılık Çatışmaları için Test Edilen Üyeleri Belirtme.
Çağrınızın SubmitChanges try/catch bloğunda, istisnaların hangi noktada oluşturulacağını belirtin.
Daha fazla bilgi için bkz Nasıl Yapılır: Eşzamanlılık Özel Durumlarının Ne Zaman Oluştuğunu Belirtme.
Ne kadar çakışma ayrıntısı almak istediğinizi belirleyin ve buna göre try/catch bloğunuza kod ekleyin.
Daha fazla bilgi için Nasıl yapılır: Varlık Çakışma Bilgilerini Alma ve Nasıl Yapılır: Üye Çakışma Bilgilerini Alma bkz.
Kodunuzda
try/catchbulduğunuz çeşitli çakışmaları nasıl çözümlemek istediğinizi ekleyin.Daha fazla bilgi için bkz Veritabanı Değerlerini Korumayı Sürdürerek Çatışmaları Çözme Yöntemi, Veritabanı Değerlerini Üzerine Yazarak Çatışmaları Çözme Yöntemi ve Veritabanı Değerleriyle Birleştirerek Çatışmaları Çözme Yöntemi.
Çakışma Bulma ve Çözümlemeyi Destekleyen LINQ to SQL Türleri
LINQ to SQL'de iyimser eşzamanlılıktaki çakışmaların çözümünü destekleyen sınıflar ve özellikler aşağıdakileri içerir: