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

时间:2015-06-15 13:00:54

标签: c# entity-framework repository unit-of-work

我的项目出错了。

   [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;
    }

首先,我推荐模型然后我正在做,但我得到了纠错过程。

提前致谢

2 个答案:

答案 0 :(得分:0)

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

例如,假设EF已经知道Customer实体CustomerId = 8.现在,如果您执行的某些操作实际上对EF有效,那么&#34;此处&#39 ;客户,CustomerId是8 - 我希望您为我跟踪#34;,EF无法为您做到这一点。

答案 1 :(得分:0)

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

您可以尝试分离和重新附加,而不是直接设置状态:

//_context.Entry(entityToUpdate).State = EntityState.Modified;

    _context.Entry(entityToUpdate).State = EntityState.Detached;
    _context.entityToUpdate.Attach(entityToUpdate);