附加类型为 '' 的实体失败,因为相同类型的另一个实体已具有相同的主键值

本文关键字:实体 键值 另一个 类型 失败 因为 同类型 | 更新日期: 2023-09-27 17:56:21

我的项目中出现错误。

   [HttpPost]
    protected virtual ActionResult Update(T entity)
    {
        var success = true;
        var errorMessages = new List<ErrorMessage>();
        try
        {
            var originalEntity = _genericService.Find(entity.Id);
            SetNullToTransientReferences(entity);
            if (!errorMessages.Any())
            {
                _genericService.Update(entity);
                //AfterUpdate(entity, originalEntity);
            }
            else
            {
                success = false;
            }
        }
        catch (Exception ex)
        {
            success = false;
            //errorMessages.AddRange(ExceptionService.GetErrorMessages(ex));
        }
        ResolveCircularReferences(entity);
        return Json(new
        {
            Data = entity,
            Success = success,
            Errors = errorMessages,
        }, JsonRequestBehavior.AllowGet);
    }

通用存储库更新方法

  public virtual void Update(TEntity entityToUpdate)
    {
        _context.Entry(entityToUpdate).State = EntityState.Modified;
    }
首先,我

敦促模型然后我正在做,但我得到了一个纠错过程。

提前致谢

附加类型为 '' 的实体失败,因为相同类型的另一个实体已具有相同的主键值

当您执行会导致 EF 上下文监视同一实体的两个实例的操作时,会发生这种情况。

例如,假设 EF 已经知道 CustomerId = 8 的Customer实体。现在,如果您执行的操作实际上会向 EF 说:"这是一个客户,CustomerId 为 8 - 我希望你为我跟踪它",EF 无法为你执行此操作。

似乎没有正确跟踪您尝试修改的实体,因此未被识别为已编辑,而是添加了。

与其直接设置状态,不如尝试分离并重新附加:

//_context.Entry(entityToUpdate).State = EntityState.Modified;
    _context.Entry(entityToUpdate).State = EntityState.Detached;
    _context.entityToUpdate.Attach(entityToUpdate);
相关文章: