2014-11-09 4 views
-1

Я пытаюсь обновить базу данных с помощью Linq к SQL с этим кодом:Нарушение ограничения первичного ключа во время обновления базы данных

public Air_Score Update(Air_Score myApp) 
    { 
     Air_Score c = null; 

     if (myApp != null) 
     { 
      c = e.Air_Score.FirstOrDefault(a => a.ID == myApp.ID); 

      if (c != null) 
      { 
       c.Score = myApp.Score; 
      } 

      e.SaveChanges(); 
     } 

     return c; 
    } 

Когда я вызываю эту функцию, я получаю это исключение

Нарушение ограничения PRIMARY KEY «PK_Air_Score». Невозможно вставить дубликат ключа в объект 'dbo.Air_Score'. Значение дублирующегося ключа равно (222).

Какая ошибка в коде ??

ответ

0

Ответ в вашем сообщении об ошибке. При обновлении данных ваш первичный ключ таблицы повторяется, и это 222. Проверьте таблицу и сохраните свою функцию, чтобы избежать такого же значения в поле первичного ключа. ПЕРВИЧНЫЙ КЛЮЧ должен быть уникальным.

+0

я хочу, чтобы обновить значение баллов для этого идентификатора я не хочу, чтобы вставить еще один столбец –

+0

Вы можете разместить код SaveChanges функции()? Я дам вам точное решение. –

+0

он находится в функции метаданных, которая сохраняет все изменения, сделанные в контексте, в базовую базу данных. –

0

Я думаю, проблема заключается в том, что вы создаете новый Air_Score и копируете существующий Air_Score и пытаетесь сохранить контекст. Поэтому инфраструктура Entity рассматривает ее как вставку, а не обновление. Пробуйте удалить начальное объявление переменной Score воздуха, как показано ниже

public Air_Score Update(Air_Score myApp) 
    { 

     if (myApp != null) 
     { 
      var c = e.Air_Score.FirstOrDefault(a => a.ID == myApp.ID); 
      if (c != null) 
      { 
       c.Score = myApp.Score; 

      } 
      e.SaveChanges(); 
     } 
     return c; 
    } 
+0

Я пробую это, но это не проблема :(Я использую этот код в другом решении, и он работает, но в этом не работает, я не могу найти ошибку –

Смежные вопросы