我在使用.net核心1.1更新嵌套对象时遇到问题。 一旦Automapper将更改的对象映射到现有对象,我就会遇到以下异常:
System.InvalidOperationException:实体类型的实例 “营养”无法跟踪,因为此类型的另一个实例 已经跟踪了相同的密钥。添加新实体时, 对于大多数密钥类型,如果不是,将创建唯一的临时密钥值 key被设置(即,如果为key属性分配了默认值 它的类型)。如果您明确设置新实体的键值, 确保它们不会与现有实体或临时值发生冲突 为其他新实体生成。附加现有实体时, 确保只有一个具有给定键值的实体实例 附在上下文中。
方法:
public async Task<ProductDto> UpdateProduct(ProductDto productDto)
{
var product = await _context.Products
.Include(x => x.Composition)
.Include(x => x.Nutritions)
.Include(x => x.ProductIngredient).ThenInclude(x => x.Ingredients).ThenInclude(x => x.IngredientComposition)
.Include(x => x.ProductionProcess)
.Where(x => x.Id == productDto.Id)
.FirstOrDefaultAsync();
if (!EligabilityCheck(product.CustomerId)) return null;
await UpdateImages(productDto, product);
_mapper.Map(productDto, product);
await _context.SaveChangesAsync();
return productDto;
}
我做错了什么? 删除的属性只是从对象中删除,更新的属性仍然具有相同的ID,新的属性具有Id = 0
感谢您的帮助 ķ