Экземпляр типа объекта "Продукт" не может быть отслежен, потому что другой экземпляр с таким же значением ключа уже отслеживается

Я сделал тест с кодом ниже, чтобы обновить Product:

var existing = await _productRepository.FirstOrDefaultAsync(c => c.Id == input.Id);
if (existing == null)
    throw new UserFriendlyException(L("ProductNotExist"));
var updatedEntity = ObjectMapper.Map<Product>(input);
var entity = await _productRepository.UpdateAsync(updatedEntity);

Но это исключение:

Mvc.ExceptionHandling.AbpExceptionFilter - Не удается отследить экземпляр типа объекта "Продукт", поскольку другой экземпляр с таким же значением ключа для {'Id'} уже отслеживается. При подключении существующих объектов убедитесь, что подключен только один экземпляр объекта с данным значением ключа.

Это вызвано запросом existing, Есть ли решение для этого?

3 ответа

Решение

Поскольку вы не используете existing сущность, не загружайте ее.

использование AnyAsync чтобы проверить, существует ли он:

var exists = await _productRepository.GetAll().AnyAsync(c => c.Id == input.Id); // Change
if (!exists)                                                                    // this
    throw new UserFriendlyException(L("ProductNotExist"));

var updatedEntity = ObjectMapper.Map<Product>(input);
var entity = await _productRepository.UpdateAsync(updatedEntity);

Если вы хотите сопоставить с existing юридическое лицо:

var existing = await _productRepository.FirstOrDefaultAsync(c => c.Id == input.Id);
if (existing == null)
    throw new UserFriendlyException(L("ProductNotExist"));

var updatedEntity = ObjectMapper.Map(input, existing); // Change this

AsNoTracking() мог бы помочь тебе.

Проверьте значение updatedEntity.Id, если он равен нулю, используйте приведенный ниже код.

var updatedEntity = ObjectMapper.Map<Product>(input);
updatedEntity.Id = input.Id; //set Id manually
var entity = await _productRepository.UpdateAsync(updatedEntity);

Добавить код для отсоединения

_dbcontext.Entry(oldEntity).State = EntityState.Detached;

Другие вопросы по тегам