Не удается удалить элемент после добавления из-за проблем с отслеживанием - PullRequest
0 голосов
/ 07 апреля 2020

Я добавляю объект, используя метод Upsert ниже, и удаляю его после использования метода Delete.

Однако это выдает строку this.Items.Remove(item) со следующей ошибкой.

public async Task<TEntity> Upsert(TEntity item)
{
   var entity = this.Context.Update(item);
   await this.SaveChangesAsync();
   return entity.Entity;
}

public async Task Delete(TEntity item)
{
   this.Items.Remove(item);
   await this.SaveChangesAsync();
}

Ошибка:

Экземпляр типа сущности 'x' не может быть отслеживается, поскольку другой экземпляр со значением ключа '{Id: 204}' уже отслеживается. При присоединении существующих сущностей убедитесь, что присоединен только один экземпляр сущности с данным значением ключа.

Я думаю, что проблема заключается в том, что когда я добавляю сущность, она добавляется как отслеживаемая, а когда я попытаться удалить, его нельзя удалить во время отслеживания?

Любая помощь очень ценится, я все еще новичок в Entity Framework.

1 Ответ

1 голос
/ 07 апреля 2020

Если вы Edit или Remove форма записи DataBase, ChaneTracker изменить состояние объекта на Modified или Removed В текущем контексте , и если вы читаете данные из базы данных ( в текущем контексте ), поскольку объекты отслеживаются ChangeTracker, возникает ошибка, поскольку в ChangeTracker не может существовать две записи с ключом одновременно. поэтому вы должны удалить отслеживаемые объекты из ChangeTracker.

Добавьте этот код после await this.SaveChangesAsync();, чтобы отсоединить записи от ChangeTracker

foreach (var entity in this.Context.ChangeTracker.Entries())
{
     entity.State = System.Data.Entity.EntityState.Detached;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...