The instance of entity type cannot be tracked because another instance of this type with the same key is already being tracked The instance of entity type cannot be tracked because another instance of this type with the same key is already being tracked asp.net asp.net

The instance of entity type cannot be tracked because another instance of this type with the same key is already being tracked


Without overriding EF track system, you can also Detach the 'local' entry and attach your updated entry before saving :

// var local = _context.Set<YourEntity>()    .Local    .FirstOrDefault(entry => entry.Id.Equals(entryId));// check if local is not null if (local != null){    // detach    _context.Entry(local).State = EntityState.Detached;}// set Modified flag in your entry_context.Entry(entryToUpdate).State = EntityState.Modified;// save _context.SaveChanges();

UPDATE:To avoid code redundancy, you can do an extension method :

public static void DetachLocal<T>(this DbContext context, T t, string entryId)     where T : class, IIdentifier {    var local = context.Set<T>()        .Local        .FirstOrDefault(entry => entry.Id.Equals(entryId));    if (!local.IsNull())    {        context.Entry(local).State = EntityState.Detached;    }    context.Entry(t).State = EntityState.Modified;}

My IIdentifier interface has just an Id string property.

Whatever your Entity, you can use this method on your context :

_context.DetachLocal(tmodel, id);_context.SaveChanges();


public async Task<Product> GetValue(int id)    {        Product Products = await _context.Products.AsNoTracking().FirstOrDefaultAsync(x => x.Id == id);        return Products;    }

AsNoTracking()


In my case, the table's id column was not set as an Identity column.