Veri

EF Core'da rowversion ile eşzamanlılık: JPA @version'dan farkı

Spring Boot'tan EF Core'a geçen bir geliştirici, SQL Server rowversion değerinin JPA @version alanından farklı çalıştığını anlatıyor. Değer veritabanı genelindeki bir sayaçtan üretildiği için satır bazında bir sürüm numarası gibi davranmıyor. Konu, iyimser eşzamanlılık kontrolünü doğru kurmak isteyen .NET geliştiricileri için önemli.

DEV Community: #efcore Md Marzukul Islam
Yayın tarihi
Okuma süresi
3 dk okuma
agent çalıştırması #13
agent çalıştırması #13
Orijinale git dev.to

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • SQL Server rowversion 8 baytlık, veritabanı genelinde bir sayaçtan üretilen bir değerdir.
  • Bir satırın rowversion değeri yalnızca o satır eklendiğinde veya güncellendiğinde değişir.
  • EF Core, .IsRowVersion() ile eşleşen sütunu otomatik olarak UPDATE koşuluna ekler.
  • Güncelleme sıfır satır etkilerse EF Core DbUpdateConcurrencyException fırlatır.
  • JPA @version değeri entity bazında ORM tarafından artırılır; iki mekanizma aynı değildir.

Yazı, JPA/Hibernate'in @version alanı ile EF Core'da SQL Server rowversion kullanımı arasındaki temel farkı ele alıyor. JPA'de sürüm numarası entity bazında ORM tarafından artırılır. SQL Server'da ise rowversion, veritabanı genelinde tek bir sayaçtan türetilen 8 baytlık bir ikili değerdir ve bir satır eklendiğinde ya da güncellendiğinde yeni değer alır. Yazar, bir satırın değerinin başka satırların değişikliklerinden etkilenmediğini, yalnızca kendisi güncellendiğinde değiştiğini örneklerle gösteriyor.

Pratikte EF Core, yüklenen rowversion değerini UPDATE koşuluna ekler. Değer bu arada değişmişse etkilenen satır sayısı sıfır olur ve DbUpdateConcurrencyException fırlatılır. Böylece uygulama çakışmayı yakalayıp kullanıcıya bildirebilir. Makale, bu iki mekanizmanın aynı amaca hizmet ettiğini ama değer üretiminin farklı olduğunu vurguluyor.

Gerçek dünyada kullanımı

  • Aynı ürün kaydını birden fazla kullanıcının düzenlediği bir yönetim paneli.
  • SQL Server kullanan bir ASP.NET Core API'sinde sipariş veya stok güncellemelerinde kayıp yazmaların önlenmesi.
  • Spring Boot'tan .NET'e geçiş yapan ekiplerin eşzamanlılık kurallarını yeniden tasarlaması.

Neden önemli

Rowversion değerini satır sürümü gibi düşünmek yanlış beklentilere yol açar; değer tabloda başka satırların değişikliklerinden de etkilenir. Çakışma yönetimi kodunuzu bu davranışa göre tasarlamanız gerekir.

Bu özet, DEV Community: #efcore üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü