2013-05-29 2 views
0

У меня есть веб-приложение MVC с EF (сначала код).дублирующий ключ в БД, который на самом деле не дублируется

В моей функции «импорта» я хочу добавить список элементов в свою БД (элемент DbContext с DbSets).

С петлей «foreach», я пытаюсь добавить каждый элемент в DB и сохранить.

public static void AddItem(Item item) 
     { 
      ItemService.AddItem(item); 
      UOW.Commit(); 
     } 

и -

//UOW 
    public void Commit() 
     { 
      m_context.SaveChanges(); 
     } 

Так может быть, некоторые из вопросов, которые уже существуют в БД, я поставил «AddItem» в «попробуй поймать» блока, так что если он не добавить товар - он будет продолжен до следующего пункта.

Проблема в том, что она работает хорошо, пока элементы не в БД. Если есть элемент, который уже существует, я получаю сообщение об ошибке, что он не может добавить дублирующий ключ, и я получаю эту ошибку для всех следующих позиций (также элементы, которых нет в БД)!

ответ

0

Может быть, ваш контекст все тот же, когда вы переходите к следующему Commit? Потому что тогда ваш новый добавленный элемент все равно будет (он никогда не был удален в конце) на следующем Commit и снова сработает.

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

+0

Я думаю, это действительно проблема, спасибо! – TamarG

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