gpt4 book ai didi

asp.net-core - 无法跟踪实体类型 '' 的实例,因为已在跟踪键值为 '{Id: 13}' 的另一个实例

转载 作者:行者123 更新时间:2023-12-02 03:09:01 25 4
gpt4 key购买 nike

我正在编写一个 API,需要访问实体的值并检查它是否已更改 (userChangedPairOrSingle)。

public ActionResult<ProdutoFabricante> Put([FromBody] ProdutoFabricanteViewModel produtoFabricanteViewModel)
{
if (produtoFabricanteViewModel.Invalid)
{
return StatusCode(400, produtoFabricanteViewModel);
}

try
{
var actualProdutoFabricante = produtoFabricanteRepository.GetById(produtoFabricanteViewModel.Id);

if (produtoFabricanteService.userChangedPairOrSingle(produtoFabricanteViewModel, actualProdutoFabricante.Par))
{

if (produtoFabricanteService.produtoFabricanteHasItems(produtoFabricanteViewModel.Id))
{
return StatusCode(400, new { Message = "Não é possível alterar " });
}
}

actualProdutoFabricante = mapper.Map<ProdutoFabricante>(produtoFabricanteViewModel);


produtoFabricanteRepository.Update(actualProdutoFabricante);
return Ok(actualProdutoFabricante);
}
catch (Exception ex)
{
return StatusCode(500, (ex.Message, InnerException: ex.InnerException?.Message));
}
}

但是当我访问要更新的同一实体时,它会出现以下错误:

The instance of entity type 'ProdutoFabricante' cannot be tracked because another instance with the key value '{Id: 13}' is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached.

如何避免此错误?

最佳答案

当您进行映射时,您将创建一个新实例(不会被跟踪),而不是更新现有实例(会被跟踪)。相反,您需要执行以下操作:

mapper.Map(produtoFabricanteViewModel, actualProdutoFabricante);

这将保留现有实例,并简单地更新其属性值。然后,EF 就可以了,因为这个实例与跟踪的实例是同一个实例。

关于asp.net-core - 无法跟踪实体类型 '' 的实例,因为已在跟踪键值为 '{Id: 13}' 的另一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58203750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com