Обновление сущности
В рабочем проекте используется следующий метод обновления сущности через EF Core
public virtual async Task<int> UpdateAsync(TDto item, CancellationToken token)
{
var existingEntity = await dbSet
.AsNoTracking()
.FirstOrDefaultAsync(e => e.Id == item.Id, token)
.ConfigureAwait(false);
if (existingEntity is null)
return ICrudRepository<TDto>.ErrorIdNotFound;
var entity = Convert(item);
var entry = dbSet.Update(entity);
await dbContext.SaveChangesAsync(token);
entry.State = EntityState.Detached;
return entry.Entity.Id;
}
Если я пытаюсь обновить имя сущности на такое же, которое у неё уже установлено, то получаю исключение
System.InvalidOperationException: The instance of entity type 'ManualFolder' 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.
С чем это может быть связано?
public async Task UpdateFolderAsync(int id, string name, CancellationToken cancellationToken)
{
var folder = await manualFolderRepository.GetOrDefaultAsync(id, cancellationToken)
?? throw new ArgumentInvalidException($"Папки с Id: {id} не сущесвует", nameof(id));
folder.Name = name;
if (await IsExistFolderAsync(folder, cancellationToken))
throw new ArgumentInvalidException("Папка с таким названием уже существует", name);
await manualFolderRepository.UpdateAsync(folder, cancellationToken);
}
Когда я пытаюсь обновить папку и именем "ТЕСТ" на "ТЕСТ", то получаю это исключение. Если я пытаюсь обновить на "ТЕСТ1" всё норм