Merhaba,
Entity Framework Core (EF Core), veritabanıyla haberleşen modern bir ORM aracıdır. EF Core içerisinde asenkron (async) metotlar, veritabanıyla gerçekten iletişime geçen işlemler için kullanılır. Bu yüzden bazı metotların Async versiyonları varken, bazıları için bu geçerli değildir.
Bu yazıda aşağıdaki sorulara net ve sade cevaplar bulacaksınız:
-
RemoveAsync() neden yok?
-
UpdateAsync() neden yok?
-
AddAsync() neden var?
RemoveAsync() Neden Yok?
Remove() Metodu bir nesneyi silinecek olarak işaretler ama veritabanına dokunmaz sadece durumu(state) değişir.
var urun = await context.Urunler.FindAsync(1);
context.Urunler.Remove(urun); // Sadece işaretlenir
await context.SaveChangesAsync(); // Veritabanından silinir
✅ Gerçek silme işlemi SaveChanges() veya SaveChangesAsync() ile yapılır.
❌ Remove() işlemi asenkron yapılmasına gerek kalmaz çünkü zaten veritabanına bir erişim yoktur.
UpdateAsync() Neden Yok?
Entity Framework Core’da Update() metodu, yalnızca bellekte (hafızada) çalışır. Yani çağrıldığında veritabanına hiçbir veri gönderilmez ve hiçbir asenkron işlem yapılmaz.
Peki Update() tam olarak ne yapar?
-
Sadece Bu nesne değişti der.
-
Entity Framework, bu nesnenin durumunu Modified olarak işaretler.
-
Ancak veritabanına bağlanmaz, sorgu göndermez, beklemesi gereken bir işlem yoktur.
Bu nedenle:
UpdateAsync() gibi bir methoda gerek yoktur. Çünkü ortada beklemeyi (await) gerektiren hiçbir işlem yoktur.
Asıl güncelleme işlemi:
-
SaveChanges() veya SaveChangesAsync() çağrıldığında yapılır.
-
O anda değişen veriler veritabanına gönderilir ve işlem tamamlanır.
var urun = new Urun { Id = 1, Ad = "Yeni Ad" };
context.Urunler.Update(urun); // Hafızada güncelleme olarak işaretlenir
await context.SaveChangesAsync(); // Veritabanında güncelleme yapılır
AddAsync() Neden Var?
AddAsync(), veritabanına yeni bir kayıt eklerken bazen veritabanı ile asenkron IO işlemi yapmak gerekebilir. Özellikle bazı veritabanı sağlayıcılarında veya bağlantılarda, ekleme işlemi sırasında zaman alan işler olabilir. Bu yüzden AddAsync() methodu async olarak tanımlanmıştır.
Add() vs AddAsync() Arasındaki Fark Nedir?
|
Özellik
|
Add()
|
AddAsync()
|
|---|---|---|
|
Tür
|
Senkron
|
Asenkron
|
|
Performans
|
Bloklama yapar
|
İşlem sırasında thread'i bloklamaz
|
|
Uygulama tipi
|
Küçük/konsol uygulamaları
|
Web, API gibi yüksek trafik ortamları
|
SaveChanges ve SaveChangesAsync’in Önemi
Tüm Add(), Remove() ve Update() işlemleri aslında EF Core’un Change Tracker mekanizmasına nesnelerin durumunu bildirir. Bu değişikliklerin veritabanına gerçekten yansıması için mutlaka SaveChanges() veya SaveChangesAsync() çağrılmalıdır. Async versiyon, IO-bound (girdi/çıktı) işlemler sırasında uygulamanızın daha performanslı kalmasını sağlar.
Sonuç
Entity Framework Core'da bazı metotların Async versiyonu olmamasının temel sebebi, o işlemlerin veritabanıyla doğrudan bir etkileşimde bulunmamasıdır.
Remove() ve Update() methodları sadece nesnenin durumunu değiştirir, gerçek işlem ise SaveChanges() veya SaveChangesAsync() ile yapılır. Bu yüzden asenkron versiyonlarına ihtiyaç duyulmaz.AddAsync()methodu bazı durumlarda IO işlemleriyle karşılaşabileceğinden asenkron olarak sunulmuştur.
Kısacası, EF Core'da hangi işlemin gerçekten veritabanına erişim gerektirdiğini anlamak, doğru metodu seçmek açısından kritik bir konudur. Bu farkındalık, hem performans hem de kod kalitesi açısından size önemli katkılar sağlayacaktır.