Экземпляр типа объекта "Продукт" не может быть отслежен, потому что другой экземпляр с таким же значением ключа уже отслеживается
Я сделал тест с кодом ниже, чтобы обновить 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
Проверьте значение 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;