Cannot insert explicit value for identity column in table 'Devices' when IDENTITY_INSERT is set to OFF – ASP.NET Core

108
14 апреля 2021, 08:10

Сразу внесу ясность: добавление строки context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT Devices ON"); ровно перед строкой, в которой возникает описанное в названии исключение НЕ ДАЁТ НИКАКОГО ЭФФЕКТА. Ошибка остаётся в том же виде.

Теперь сам вопрос: при попытке записать объект класса в базу данных (вместе с ID-полем) вылетает исключение, как указано в названии вопроса. Есть ли какой-то более элегантный и надёжный способ установить IDENTITY_INSERT для таблицы в ON, чем отправка голого SQL-запроса?

Answer 1

Элегантный и надежный способ - не писать в IDENTITY поле. А чтобы сработало с SET IDENTITY_INSERT, нужно все выполнять одной командой:

SET IDENTITY_INSERT Devices ON;
INSERT Devices (Id, Value)
SELECT @Id, @Value;
SET IDENTITY_INSERT Devices OFF;

Как вариант, чтобы не возиться с этим в C# коде, можно создать хранимую процедуру для вставки в Devices и просто вызывать ее с параметрами @Id, @Value и тп.

READ ALSO
Поменять местами соседние слова

Поменять местами соседние слова

С таким кодом возникает проблема с последним словом:

133
Downcast ComboBox в Win Forms

Downcast ComboBox в Win Forms

У меня есть класс FurnitureComboBox, который является наследником ComboBoxПытаюсь привести ComboBox к FurnitureComboBox (от базового к производному) и чего-то не понимаю

67
ReCaptcha в Selenium WebDriver C#

ReCaptcha в Selenium WebDriver C#

Пытаюсь авторизоваться на сайте, но при решении ReCaptcha руками(ставиться пауза в скрипте), выводится ошибка "Повторите попытку"

82
Почему не работает программа ? Данная программа предназначена для вывода значений уровня владения иностранным языком на консоль с помощью Enum [закрыт]

Почему не работает программа ? Данная программа предназначена для вывода значений уровня владения иностранным языком на консоль с помощью Enum [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

99