无法跟踪实体类型的实例,因为已经跟踪了另一个键值为'{Id:13}'的实例

问题描述 投票:0回答:1

我正在编写一个需要访问实体值并检查其值是否已更改的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));
        }
    }

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

无法跟踪实体类型'ProdutoFabricante'的实例,因为已经跟踪了另一个键值为'{Id:13}'的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。

如何避免此错误?

asp.net-core entity-framework-core asp.net-core-webapi repository-pattern
1个回答
1
投票

[映射时,您正在创建一个新实例(未跟踪),而不是更新现有实例(已跟踪)。相反,您需要这样做:

© www.soinside.com 2019 - 2024. All rights reserved.