Ошибка ограничения уникального ключа при обновлении таблицы SQL Server в приложении ASP.NET
У меня есть простая таблица со следующим:
ID MarketID Lead
1 1 true
2 1 false
3 2 true
4 2 false
Это таблица парных значений, поэтому шаблон состоит в том, что всегда есть две строки с одинаковым MarketID, но одна должна быть false (0), а другая должна быть true (1). Это обеспечивается ограничением уникального ключа (которое гарантирует, что MarketID и Lead объединены) уникально), которое работает как ожидалось.
Однако я хочу, чтобы пользователь мог изменять столбец "Lead" и переключать значения.
У меня это работает нормально, пока я не вызову SubmitChanges:
table.AttachAll(updated);
table.Context.Refresh(RefreshMode.KeepCurrentValues, updated);
table.Context.SubmitChanges();
Где обновлены две измененные строки
Беглый взгляд на SQL Profiler показывает, что SQL Server (2008) обновляет строку за строкой, поэтому сначала он обновляет истинное значение на false, но прежде чем ему удастся изменить значение false на true во второй строке, он вызывает разрыв и завершается ошибкой. потому что теперь оба установлены в false.
Кто-нибудь знает способ обойти это?
1 ответ
Временно отключите и снова включите уникальное ограничение.
Временно разрешите IDENTITY INSERTS, затем удалите и заново создайте обе строки.
Временно разрешите IDENTITY INSERTS, затем обновите
ID
значение обеих строк. (это может быть трехэтапный процесс, еслиID
столбец имеет уникальное ограничение)Разрешить NULL в
Lead
столбца и используйте NULL для временного обхода ограничения UNIQUE, пока вы переключаете одну строку, а затем другую.
... и если я подумаю о других, я добавлю их позже.