EF Core detach all entities

Hey there folks, long time no post as I was pretty busy. I have many many ideas for blog posts, I just need to create some time to write them.

Recently I’ve had an issue with some entities and after performing a delete to the database. Basically, I was given this error while trying to update the entity:

System.InvalidOperationException: The instance of entity type 'Entity' 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

I personally don’t understand why an already tracked entity is not reused later if necessary. But this is an error that EF gives and I had to workaround a solution to detach any entity after the deletion, so I came up with this helper method:


public static void DetachAllEntries(this DbContext context)
{
    foreach (var entry in context.ChangeTracker.Entries().ToList())
    {
         context.Entry(entry.Entity).State = EntityState.Detached;
    }
}

So calling it after the deletion and then performing the update worked perfectly. This may not be needed in all situations, but in my case I didn’t have any other option.

This method can also be found in my nuget package Mindgaze.AspNetCore, version 1.3.1. Youhuu! So with this being said, I wish you happy coding!

Thanks for reading, I hope you found this article useful and interesting. If you have any suggestions don’t hesitate to contact me. I also invite you to share and subscribe to the newsletter by using the buttons below! Cheers  😉

How useful was this post?

Click on a star to rate it!

Average rating 5 / 5. Vote count: 3

We are sorry that this post was not useful for you!

Let us improve this post!

Leave a Reply

avatar
  Subscribe  
Notify of