EF Core Update ve Delete İşlemi

Okuma Süresi: 3 dakika
A+
A-

//EF CORE

1) VERİ GÜNCELLEME
Bir verinin güncellenmesi için ilk önce DB üzerinden ilgili veriye erişmek gerekir. Veriyi context üzerinden elde ettikten sonra ilgili güncelleme işlemleri gerçekleştirilebilir.

// ID değeri 3 olan ürün DB den çekilip aşağıda ilgili güncelleme işlemi yapılır.
ETicaretContext context = new();
Urun urun = await context.Urunler.FirstOrDefaultAsync(u => u.Id == 3);
urun.UrunAdi = "H Ürünü";
urun.Fiyat = 999;
await context.SaveChangesAsync();
//Burada EF CORE bir UPDATE işlemi olduğunu anlayıp SaveChangesAsync ile işlemi güncelleyip update etmektedir.

2) ChangeTracker Nedir?
ChangeTracker, context üzerinden gelen verilerin takibinden sorumlu bir mekanizmadır. Bu takip mekanizması sayesinde context üzerinden gelen verilerle ilgili işlemler neticesinde update yahut delete sorgularının oluşturulacağı anlaşılır!

3 ) Context’den elde edilmeyen verilerin UPDATE edilmesi nasıl olur ? UPDATE METODU
Context üzerinden bir sorgu neticesinde gelmeyen bir işlemde yani Change Tracker ın devrede olmadığı işlemlerde (EF CORE tarafından takip edilmeyen nesneler ) EF CORE tarafından UPDATE metodu ile güncellemesi yapılır.

Eticaretcontext context = new();
urun urun = new()
{
id = 3,
urunadi = "yeni ürün",
fiyat = 123
};

ChangeTracker mekanizması tarafından takip edilmeyen nesnelerin güncellenebilmesi için Update fonksiyonu kullanılır!
Update fonksiyonunu kullanabilmek için kesinlikle ilgili nesnede Id değeri verilmelidir! Bu değer güncellenecek(update sorgusu oluşturulacak) verinin hangisi olduğunu ifade edecektir.

context.Urunler.Update(urun);
await context.SaveChangesAsync();

4) EntityState Nedir?

Bir entity instance’ının durumunu ifade eden bir referanstır.

ETicaretContext context = new();
Urun u = new();
Console.WriteLine(context.Entry(u).State);

5) EF Core Açısından Bir Verinin Güncellenmesi Gerektiği Nasıl Anlaşılıyor?

ETicaretContext context = new();
Urun urun = await context.Urunler.FirstOrDefaultAsync(u => u.Id == 3);
Console.WriteLine(context.Entry(urun).State); //State Unchanged -> Yani DB de böyle bir veri var ve üzerinde bir işlem yapılmamış.

urun.UrunAdi = "Vida";

Console.WriteLine(context.Entry(urun).State); //State Modified

await context.SaveChangesAsync();

Console.WriteLine(context.Entry(urun).State); //State Unchanged -> Bir üst işlemde modified olduktan sonra artık DB ye gönderildi ve kaydolu. Bu aşamadan sonra state unchanged.

urun.Fiyat = 999;

Console.WriteLine(context.Entry(urun).State);

6) Birden Fazla Veri Güncellenirken Nelere Dikkat Edilmelidir?

ETicaretContext context = new();

var urunler = await context.Urunler.ToListAsync();
foreach (var urun in urunler)
{
urun.UrunAdi += "*";
}
//Burada performans açısından önemli nokta tüm UPDATE işlemleri tamamlandıktan sonra SaveChangesAsync ' ın çağırılmasıdır !
await context.SaveChangesAsync();

Bir Yorum Yazın

Ziyaretçi Yorumları - 0 Yorum

Henüz yorum yapılmamış.