COMPUTER ENGINEER

Örneklere git
Blog
Next.js / ASP.NET Core / SQL6 dk çalışma
30/ 41

Veri katmanı ve SQL

Transaction, eşzamanlılık ve tutarlılık

Ya hep ya hiç: birden çok değişikliği güvenle yazmak ve aynı kaydı iki kişinin değiştirmesi.

AnlaÖrneği inceleKendin uygula

Kavramı anlayalım

Transaction, birden çok değişikliği tek bir bölünmez birim yapar: ya hepsi kaydedilir ya hiçbiri. EF Core’da tek bir SaveChanges çağrısı zaten bir transaction içinde çalışır; aynı çağrıda eklenen yazı ve etiketleri birlikte yazılır veya birlikte geri alınır. Birden çok SaveChanges’i birleştirmek gerektiğinde açık bir transaction başlatılır.

Transaction’lar kısa tutulmalıdır. Açık bir transaction kilit tutar ve bağlantıyı meşgul eder; içinde e-posta göndermek veya dış bir API çağırmak, diğer istekleri bekletir ve havuzu tüketir. Dış etkiler, veritabanı işlemi başarıyla bittikten sonra yapılmalıdır.

Eşzamanlılık, iki kullanıcının aynı kaydı aynı anda değiştirmesidir. ‘Son yazan kazanır’ yaklaşımında birinin değişikliği sessizce kaybolur. İyimser eşzamanlılık bunu önler: kayıtla birlikte bir sürüm (rowversion) okunur ve güncelleme yalnız sürüm değişmediyse uygulanır. Değiştiyse EF Core DbUpdateConcurrencyException fırlatır ve kullanıcıya ‘bu kayıt sen düzenlerken değişti’ denebilir.

NERESİNDE KULLANIRSIN?

Yarım kalmış veya sessizce ezilmiş veri, en zor fark edilen hatalardandır.

SIK YAPILAN HATA

Transaction açıkken HTTP çağrısı yapmak veya e-posta göndermek.

01 / UYGULAMA

Aynı konu. Üç farklı derinlik.

Temsili örnek
db.Posts.Add(post);
db.PostTags.AddRange(tags);
await db.SaveChangesAsync(ct); // ikisi birlikte yazılır veya hiçbiri

Tek SaveChanges kendi transaction’ı içinde çalışır.

Bu sayfa gerçek bir sunucuya veya veritabanına bağlanmaz. Kod örnekleri .NET 8, Next.js ve SQL Server için temsilîdir; süreler simülasyondaki örnek değerlerdir, ölçüm değildir. Örnekleri yalnız kendi geliştirme ortamında dene; gerçek bağlantı dizesi, token veya parola paylaşma.

02 / SIRA SENDE

Önce kendin dene.

İki sekmede aynı blog yazısı açık. Birinde başlık, diğerinde içerik değiştirilip sırayla kaydediliyor. Sürüm kontrolü yoksa ne olur? Varsa ne olur?

Çözümü ve açıklamasını göster
Açıklamalı çözüm
Yoksa: ikinci kayıt, ilk sekmenin yüklediği eski başlığı da yazar → başlık değişikliği kaybolur.
Varsa: ikinci kayıt 409 alır; kullanıcı güncel hali görüp değişikliğini yeniden uygular.

İyimser eşzamanlılık, kayıp güncellemeyi sessiz bir hata olmaktan çıkarıp görünür bir çakışmaya çevirir.