Сразу внесу ясность: добавление строки context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT Devices ON"); ровно перед строкой, в которой возникает описанное в названии исключение НЕ ДАЁТ НИКАКОГО ЭФФЕКТА. Ошибка остаётся в том же виде.
Теперь сам вопрос: при попытке записать объект класса в базу данных (вместе с ID-полем) вылетает исключение, как указано в названии вопроса. Есть ли какой-то более элегантный и надёжный способ установить IDENTITY_INSERT для таблицы в ON, чем отправка голого SQL-запроса?
Элегантный и надежный способ - не писать в 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 и тп.
Продвижение своими сайтами как стратегия роста и независимости