本文介绍了无法跟踪实体类型“产品"的实例,因为已经跟踪了另一个具有相同键值的实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用以下代码进行了测试,以更新Product
:
I made a test with code below to update the 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);
但是会引发异常:
这是由查询existing
引起的.有什么解决办法吗?
This is caused by querying existing
. Is there any solution for this?
推荐答案
由于您没有使用existing
实体,因此请不要加载它.
Since you are not using the existing
entity, don't load it.
使用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
这篇关于无法跟踪实体类型“产品"的实例,因为已经跟踪了另一个具有相同键值的实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!