Сообщение об ошибке «InvalidOperationException: экземпляр типа сущности» не может быть отслежен, поскольку другой экземпляр» обычно появляется, когда вы работаете с контекстом Entity Framework Core (EF Core) и пытаетесь отслеживать несколько экземпляры одной и той же сущности.
Вот несколько способов решения этой проблемы:
-
Отсоединить и повторно присоединить объект:
var entity = dbContext.Set<EntityType>().Local.FirstOrDefault(e => e.Id == entityId); if (entity != null) { dbContext.Entry(entity).State = EntityState.Detached; } // Make changes to the entity dbContext.Update(entity); dbContext.SaveChanges(); -
Загрузить объект в новый контекст:
var entity = dbContext.Set<EntityType>().FirstOrDefault(e => e.Id == entityId); if (entity != null) { dbContext.Dispose(); dbContext = new YourDbContext(); // Create a new instance of your DbContext // Make changes to the entity dbContext.Update(entity); dbContext.SaveChanges(); } -
Использовать новый контекст для каждого объекта:
using (var dbContext = new YourDbContext()) { var entity = dbContext.Set<EntityType>().FirstOrDefault(e => e.Id == entityId); if (entity != null) { // Make changes to the entity dbContext.Update(entity); dbContext.SaveChanges(); } } -
Перезагрузить объект из контекста:
var entity = dbContext.Set<EntityType>().FirstOrDefault(e => e.Id == entityId); if (entity != null) { dbContext.Entry(entity).Reload(); // Make changes to the entity dbContext.Update(entity); dbContext.SaveChanges(); }
Не забудьте заменить «EntityType» фактическим типом вашей сущности, а «entityId» — соответствующим идентификатором сущности, с которой вы работаете.