Не удалось подключить объект типа '', поскольку другой объект того же типа уже имеет такое же значение первичного ключа

Я получил ошибку в моем проекте.

   [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 ответа

Кажется, что сущность, которую вы пытаетесь изменить, не отслеживается правильно и поэтому не распознается как отредактированная, а вместо этого добавляется.

Вместо прямой установки состояния, вы можете попробовать отсоединить и повторно присоединить:

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

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

Это происходит, когда вы выполняете действие, которое приведет к тому, что в контексте EF будет отслеживаться два экземпляра одного и того же объекта.

Например, скажем, EF уже знает о Customer сущность с CustomerId = 8. Теперь, если вы выполните какое-либо действие, которое, по сути, скажет EF: "Вот Клиент, CustomerId равен 8 - я хочу, чтобы вы отследили его для меня", EF не сможет сделать это за вас.

Другие вопросы по тегам