Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Asp.NET Core – “The Instance Of Entity Type ‘X’ Cannot Be Tracked Because Another Instance Of This Type With The Same Key Is Already Being Tracked” Hatası ve Çözümü

Merhaba,

Asp.NET Core framework’ü temelinde geliştirilen bir web projesinde, içerisinde kendi tipinden başka bir anahtar değere bağlı olan ya da bir başka deyişle içerisinde kendi kendine foreign key bağlantısı olan entity’den türetilmiş datalar üzerinde bir güncelleme işlemi yapmaya çalışıldığı zaman aşağıdaki olası hatayla karşılaşılması muhtemeldir;

“The instance of entity type ‘X’ cannot be tracked because another instance with the same key value for {‘Id’} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using ‘DbContextOptionsBuilder.EnableSensitiveDataLogging’ to see the conflicting key values.'”

İşte böyle bir durumda ilgili hatayı aşabilmek için uygulamada kullanılan “Context” sınıfının nesnesi üzerinden aşağıdaki uygulamayı gerçekleştirmek oldukça yeterli olacaktır;

DbContext.Entry<X>(model).State = Microsoft.EntityFrameworkCore.EntityState.Modified;

Generic olan “Entry” metoduna verilen generic tip ile uyumlu “model” nesnesinin “State” değerinin “Modified” olarak belirtilmesi, hatanın temel sebebi olan iç içe ilişkisel duruma rağmen veri üzerinde değişikliğe izin verecek ve ilgili hatayı ortadan kaldıracaktır.

Faydalanmanız dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

4 Cevaplar

  1. Ahmet Altun dedi ki:

    Üstad, Allah uzun ömür ve sağlık versin.
    Asp.NET Core tarafında ne sıkıntı yaşasam, stackoverflow ile birlikte birtek senin blogunda çözüm gördüm. Muazzam bir insansın vesselam.
    Allah işlerini rast getirsin

  2. Muttalip Tümer dedi ki:

    Hocam update sorgusunda bu hatayı alıyorum. Aynı kaydı arka arkaya 2 kere update etmeye çalıştığımda ilk update yapıyor ikincisinde bu hatayı alıyorum. State’i atamadan önce entity nesnesni attach ediyorum. Sonra stateini modified olarak güncelliyorum. 1.update başarılı, 2.update için bu hata var. Ne yapmam gerekir?

  3. MEHMET MANSUR DEĞİRMENCİ dedi ki:

    DbContext.Entry(model).State = Microsoft.EntityFrameworkCore.EntityState.Modified;

    bu yöntemi kullanmalısın.

MEHMET MANSUR DEĞİRMENCİ için bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir