2015-06-15 1 views
0

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

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

Generic Repository Метод Update

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

Во-первых, я убеждаю модель, то я делаю, но я получаю процесс коррекции ошибок.

Заранее спасибо

+0

Пожалуйста, посмотрите на мой ответ на [ASP.NET MVC - Прикрепление объект типа «ModelName» не удалось, потому что другой объект того же типа уже имеет такое же значение первичного ключа] (http://stackoverflow.com/questions/23201907/asp-net-mvc-attaching-anity-of-type-modelname-failed-because-another- лор/39557606 # 39557606). –

ответ

0

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

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

0

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

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

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

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

Ошибка продолжается друзьям, я хочу сделать; Обновить, чтобы получить новый трюм и старые данные – Murattt