我正在尝试使用自动映射器更新产品实体。产品实体与variOption实体有关系。当我执行更新时,我收到异常: “ InvalidOperationException:无法跟踪实体类型'VariOption'的实例,因为已经跟踪了另一个具有相同'{'Id'}键值的实例。在附加现有实体时,请确保只有一个具有给定实体的实体实例键值已附加。”
有人可以建议我吗?
Product.cs
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<VariOption> VariOptions { get; set; }
public Product()
{
VariOptions = new Collection<VariOption>();
}
}
VariOption.cs
public class VariOption
{
public int Id { get; set; }
public string OptName { get; set; }
public Product Product { get; set; }
public int ProductId { get; set; }
}
ProductForUpdateDto.cs
public class ProductForUpdateDto
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public ICollection<VariOptionForUpdateDto> VariOptions { get; set; }
}
VariOptionForUpdateDto.cs
public class VariOptionForUpdateDto
{
public int Id { get; set; }
[Required]
public string OptName { get; set; }
public ICollection<VariOptionTwoForUpdateDto> VariOptionTwos { get; set; }
}
MapperProfile
CreateMap<ProductForUpdateDto, Product>();
CreateMap<VariOptionForUpdateDto, VariOption>();
UpdateProductController
public async Task<IActionResult> UpdateProduct([FromBody] ProductForUpdateDto productForUpdateDto)
{
var productFromRepo = await _product.GetProduct(productForUpdateDto.Id);
_mapper.Map(productForUpdateDto, productFromRepo);
if(await _product.SaveAll())
{
return Ok();
}
return BadRequest("$Updating product {productForSaveDto.Id} failed on {type}");
}