Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 3308|Yanıt: 0

[Kaynak] EF eşzamanlılık istisnası DbUpdateConcurrencyException önbelleklenmiş değeri yeniden sorgular

[Bağlantıyı kopyala]
Yayınlandı 1.11.2023 20:30:43 | | | |
Gereksinimler: EF optimistik kilitleri kullanarak eşzamanlılığı kontrol edin; eşzamanlılık karşılaşırsanız, bir yeniden deneme mekanizması ekleyin, tekrar denemeden sonra tekrar sorgulanan verinin EF önbellekli veri olduğunu tespit edin, böylece istisnalar her zaman kaydedilir.

Veritabanı operasyonunun 1 satır(ları) etkilemesi bekleniyordu, ancak aslında 0 satır(ları) etkiledi; Veriler, varlıklar yüklendiğinden beri değiştirilmiş veya silinmiş olabilir. GörmekBağlantı girişi görünür.İyimser eşzamanlı istisnaların anlaşılması ve başa çıkılması hakkında bilgi için.

Bu tartışma, EF 6.x ve EF Core sorgu önbelleği üzerine düşüncelere yol açtı:Bağlantı girişi görünür.

Eşzamanlı Zaman Damgası ve Eşdeğer Kontrol ayrımının ele alınması
https://www.itsvse.com/thread-3616-1-1.html

Aşağıda gösterildiği gibi:



SQL script:

ASP.NET Core 6 backend kodu:

Kontrolör Kodu:



Seçenek 1 (önerilir)

kullanmakEntityState.BağımsızVarlık durumunu bağlam tarafından takip edilmez olarak işaretleyerek aşağıdaki şekilde değiştirin:

Aşağıda gösterildiği gibi:



Seçenek 2

Varlık nesnesini yenilemek için Reload() yöntemini çağırın, kod şu şekildedir:

Yeniden yükleme ayrıca EF önbellek değerlerini de yenileyebilse de,Bu durum, SQL sorgularının birden fazla kez çalıştırılmasına yol açıyorBu nedenle, tavsiye edilmez.

Diğer iki yöntem, AsNoTracking uygun değildir ve diğeri test edilmemiştir.

(Son)




Önceki:.NET, veritabanı varbinary diziyi bayt[] dizisine dönüştürür
Önümüzdeki:Çalıştırma komutunu başlatmak için OpenWRT ayarları
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com