我用下面的代码进行了测试以更新 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 - 无法跟踪实体类型“Product”的实例,因为已经跟踪了另一个具有{'Id'}键值的实例 . 附加现有实体时,请确保仅附加具有给定键值的一个实体实例 .
这是由查询 existing
引起的 . 这有什么解决方案吗?
3 回答
由于您未使用
existing
实体,请不要加载它 .使用
AnyAsync
检查它是否存在:如果要映射到
existing
实体:AsNoTracking()
可以帮到你 .检查
updatedEntity.Id
的值,如果它为零则使用下面的代码 .