IDENTITY_INSERT отключен
У меня есть веб-приложение MVC с таблицей в модели, которую я бы хотел добавить. У меня есть первичный ключ вместе с другими полями данных, но каждый раз, когда я пытаюсь добавить в таблицу, я получаю следующую ошибку:
"Невозможно вставить явное значение для столбца идентификатора в таблице TABLE_NAME, если для параметра IDENTITY_INSERT установлено значение OFF."
Я не уверен, почему эта проблема подходит, у меня есть первичный ключ, заданный как идентификатор, и он также настроен на автоматическое увеличение в дизайнере таблицы Visual Studio. Можно ли настроить параметр IDENTITY_INSERT в дизайнере таблиц в Visual Studio? Или есть еще одна проблема, которая может вызвать это.
UPDATE: @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();
}
}
}
Ответы
Ответ 1
Казалось бы, ваш код пытается вставить определенное значение в столбец первичного ключа, который определяется как IDENTITY.
Чтобы избежать ошибки - не вставляйте никаких значений! Пусть дескриптор базы данных получает новое значение для строки, которую вы вставляете.
Если вы используете Linq-to-SQL, щелкните соответствующую таблицу в своем визуальном дизайнере и посмотрите на свойства:
alt text http://i39.tinypic.com/bgzs6d.png
"Автоматическое генерируемое значение" должно быть "True" (которое не является значением по умолчанию), а автосинхронизация должна быть "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
Это скорее задача задачи очистки/данных - не то, что вы должны делать все время как dev.
Ответ 2
Вы пытаетесь установить значение первичного ключа явно, вероятно, в объекте LINQ; вы пытаетесь сказать, например, вставить 1 в поле первичного ключа, что личность, и LINQ видит это как вставленное значение.
Также, если вы используете LINQ to SQL в типе данных сервера, убедитесь, что он говорит IDENTITY в поле типа данных; если он не говорит IDENTITY, в LINQ может быть ошибка конфигурации.
Ответ 3
Спасибо всем за ваши предложения, я решил решить проблему, выполнив обновление модели. Моя модель была создана до того, как я установил первичный ключ в спецификацию Identity с автоматическим приращением, поэтому, я думаю, все, что ему нужно, это обновление, чтобы это произошло.
Ответ 4
Если вы используете LinQ для SQL.just удалите свою таблицу из .edmx файла, щелкнув правой кнопкой мыши по таблице и выбрав опцию "Удалить из модели". а затем обновите файл .edmx, щелкнув правой кнопкой мыши на файле .edmx и выбрав опцию "Обновить модель из базы данных...".
Его работа для меня... Попробуй..
Ответ 5
У меня была эта проблема и она была решена, удалив столбец идентификатора из модели. Это очистило его прямо.