2015-09-15 3 views
0

Я получаю уникальное нарушение ограничений при попытке сделать SaveChanges() на моем EF.Entity Framework 6 SaveChanges вызывает исключительное исключение ограничений

Есть две колонки, ID и Order. Единственное ограничение заключается в этих двух столбцах.

Я обновляю заказ (заменяя два значения).

Однако, когда я делаю SaveChanges() Я получаю DBUpdateExcception, заявив, что нарушил уникальное ограничение - но у меня его нет! Я только что заменил заказ.

Name | ID | Order 
BH | 49 | 1 
JK | 49 | 2 

Так в коде, теперь он выглядит так (и я проверил EF в отладчике)

Name | ID | Order 
BH | 49 | 2 
JK | 49 | 1 

Как я уже говорил, хотя, когда я SaveChanges() я получаю исключение.

Я не знаю, есть ли проблемы с моей моделью в visual studio 2015 (нужно установить свойство или что-то, что позволит обновлять?). Проблема, похоже, в том, что «она» неправильно выполняет обновление.

Цените любую помощь!

+0

Опубликовать свой реальный код на C#, например, модели и сохранить изменения –

+0

Если я правильно понял, это невозможно. См. [Здесь] (https://social.msdn.microsoft.com/Forums/en-US/e483f98e-085b-46ba-b748-6e1614558efc/updating-the-entity-primary-key?forum=adodotnetentityframework). Как указано в ответе, можно удалить старый объект и readd new, но это зависит от структуры отношений с БД. – ieaglle

+0

@CallumLinington Извините, у меня не было доступа к моему коду во время публикации - пришлось попробовать и сделать это во время обеда и из памяти. – Yabbie

ответ

3

EntityFramework обновляет одну строку за раз. Так, переключая значение двух объектов Order и вызова SaveChanges() Это первый стреляет что-то вроде этого:

UPDATE TABLENAME SET [Order] = 2 WHERE [TABLENAME].[ID] = 49 AND [TABLENAME].[Order] = 1 

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

+1

Вот чего я боялся. Так есть способ сделать то, что я пытаюсь сделать? Я не могу быть первым человеком, которому необходимо обновить значение, которое является частью уникального ограничения до ??? Я не думаю, что можно временно отключить ограничения на БД через код ... – Yabbie

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