Проблема при обновлении сущности в EF Core

Рейтинг: 0Ответов: 1Опубликовано: 02.08.2023

Я пытаюсь обновить сущность в репозитории, но у меня возникает ошибка:

System.InvalidOperationException: The instance of entity type 
'CatalogItem' 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 UpdateAsync(CatalogItemUpdateParameters parameters, CancellationToken cancellationToken = default)
{
    var catalogItem = await _catalogItemRepository.FirstOrDefaultAsync(parameters.Id, cancellationToken) ??
                    throw new ObjectNotFoundException($"Элемент каталога с Id {parameters.Id} не найден");

    catalogItem.Name = parameters.Name;
    catalogItem.UpdatedAtUtc = DateTime.UtcNow;

    await _catalogItemModelValidator.ValidateAndThrowAsync(catalogItem, cancellationToken);

    await _catalogItemRepository.UpdateAsync(catalogItem, cancellationToken);
}

public Task UpdateAsync(TModel model, CancellationToken cancellationToken = default)
{
    var entity = _mapper.Map<TEntity>(model);
    
    _dbContext.Entry(entity).State = EntityState.Modified;
    _dbContext.Set<TEntity>().Update(entity);

    return _dbContext.SaveChangesAsync(cancellationToken);
}

Ответы

▲ -1

Попробуйте записать получение объекта из БД, вот так var catalogItem = await _catalogItemRepository.FirstOrDefaultAsync(parameters.Id, cancellationToken).AsNoTracking() ?? throw new ObjectNotFoundException($"Элемент каталога с Id {parameters.Id} не найден");

Имеется в виду что данный объект извлекатся из базы данных без отслеживания, то есть с опцией.AsNoTracking()