IDENTITY_INSERT установлен на от ошибки

У меня есть веб-приложение MVC с таблицей в модели, к которой я хотел бы добавить. Мне установили первичный ключ наряду с другими полями данных, но каждый раз я пытаюсь добавить к таблице, я получаю следующую ошибку:

"Не может вставить явное значение для столбца идентификационных данных в таблице 'TABLE_NAME', когда IDENTITY_INSERT установлен на ПРОЧЬ".

Я не уверен, почему эта проблема подходит, мне установили первичный ключ как идентификационные данные, и это также установлено на автоматический инкремент в разработчике таблицы Visual Studio. Есть ли какой-либо способ, которым я могу скорректировать параметр IDENTITY_INSERT в разработчике таблицы в Visual Studio?? Или есть ли некоторая другая проблема, которая могла бы вызывать это.

ОБНОВЛЕНИЕ: @Brian - Насколько я могу сказать, я не устанавливаю значение явно, вот код, который добавляет к таблице (таблицам).

//Add viewer
public void addViewer(ModelStateDictionary modelState, Users user)
{
   var userToAdd = new UserRoles();
   userToAdd.Users = user;

   if (String.IsNullOrEmpty(userToAdd.Users.Username))
   {
      modelState.AddModelError("noName", "Please enter a username for the new Viewer");
   }

   //See if Committee Member already exists
   try
   {
      userToAdd = _db.UserRoles.First(ur => ur.Users.Username == userToAdd.Users.Username);
      modelState.AddModelError("userExists", "A Viewer with that username already exists in the system");
      return;
    }
    catch (Exception e)
    {
       if (modelState.IsValid)
       {
          //Assign Committee Member role
          userToAdd.Role = "Viewer";
          userToAdd.Users = user;
          //Add new Committee Member to User Roles and associated username to Users
          _db.AddToUserRoles(userToAdd);
          _db.SaveChanges();
       }
    }
}
10
задан marc_s 17 May 2010 в 19:01
поделиться

3 ответа

Вы пытаетесь явно установить значение первичного ключа, возможно, в сущности LINQ; вы пытаетесь сказать, например, что вставьте 1 в поле первичного ключа, которое является идентификатором, и LINQ видит это как вставленное значение.

Также при использовании LINQ to SQL в типе данных поля сервера убедитесь, что в поле типа данных указано IDENTITY; если он не говорит ИДЕНТИЧНОСТЬ, возможно, в LINQ произошла ошибка конфигурации.

5
ответ дан 3 December 2019 в 16:09
поделиться

Похоже, что ваш код пытается вставить конкретное значение в столбец первичного ключа, который определен как IDENTITY.

Чтобы избежать ошибки - не вставляйте никаких значений! Позвольте базе данных получить новое значение для строки, которую вы вставляете.

Если вы используете Linq-to-SQL, щелкните на таблице в визуальном дизайнере и посмотрите на свойства:

alt text

"Auto Generated Value" должно быть "True" (что не является значением по умолчанию), а Auto-Sync должно быть "OnInsert" (опять же: не по умолчанию). Также установите для "Первичного ключа" значение true и убедитесь, что "Тип данных сервера" правильный - Int NOT NULL IDENTITY (или что-то подобное).

Если вам когда-нибудь понадобится отменить поведение по умолчанию (обычно только в сценариях очистки или при одноразовых манипуляциях с данными), вы можете включить IDENTITY_INSERT в таблице, например, после этого вы можете вставить любое значение в столбец IDENTITY:

SET IDENTITY_INSERT YourTableName ON

INSERT INTO YourTableName(IdentityColumn) VALUES(5555)

SET IDENTITY_INSERT YourTableName OFF

Это скорее задача по очистке/администрированию данных - не то, что вы должны делать постоянно как разработчик.

15
ответ дан 3 December 2019 в 16:09
поделиться

Спасибо всем за ваши предложения, в итоге я решил свою проблему, обновив модель. Моя модель была создана до того, как я установил первичный ключ на Identity spec с автоинкрементом, поэтому, я думаю, все, что нужно было сделать, это обновить модель, чтобы она заработала.

4
ответ дан 3 December 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: