Yazılım Mimarileri ve Tasarım Desenleri Üzerine

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…

Mobil sürümden çık