При выполнении следующего сценария у меня возникает следующая ошибка. В чем заключается ошибка и как ее можно устранить?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
Ошибка:
Сервер: Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table 'table' when IDENTITY_INSERT is set to OFF.
Вы вставляете значения для OperationId
, который является столбцом идентичности..
Вы можете включить вставку идентичности для таблицы, подобной этой, чтобы вы могли указать свои собственные значения идентичности.
SET IDENTITY_INSERT Table1 ON
INSERT INTO Table1
/*Note the column list is REQUIRED here, not optional*/
(OperationID,
OpDescription,
FilterID)
VALUES (20,
'Hierachy Update',
1)
SET IDENTITY_INSERT Table1 OFF
не ставьте значение в OperationID, потому что оно будет сгенерировано автоматически. попробуйте это:
Insert table(OpDescription,FilterID) values ('Hierachy Update',1)
Будьте очень осторожны с установкой IDENTITY_INSERT в ON. Это плохая практика, если только база данных не находится в режиме обслуживания и не настроена на однопользовательский режим. Это повлияет не только на вашу вставку, но и на вставки всех остальных пользователей, пытающихся получить доступ к таблице.
Почему вы пытаетесь поместить значение в поле идентификации?
и GT;просто если вы получаете эту ошибку на SQL сервер, потом запустить этот запрос-
SET IDENTITY_INSERT tableName ON
это работает только одной таблицы базы данных е.G Если имя таблицы студент тогда запрос выглядит этот набор студента identity_insert установлен на`
если вы получаете эту ошибку на своем веб-приложении или с помощью Entity рамки, то сначала выполнить этот запрос на SQL Server и обновить ваш модель сущностей (
.edmx-файл
) и создайте свой проект и эта ошибка будет устранена
Существует 2 различных способа вставлять записи без ошибки:
когда параметр identity_insert имеет значение выкл. Первичный ключ команда;ИД" и не должно быть
Когда identity_insert установлен на. Первичный ключ моя душа;ИД" не должны присутствовать
Как в следующем примере из той же таблицы, созданные с первичным ключом идентичности:
CREATE TABLE [dbo].[Persons] (
ID INT IDENTITY(1,1) PRIMARY KEY,
LastName VARCHAR(40) NOT NULL,
FirstName VARCHAR(40)
);
SET IDENTITY_INSERT [dbo].[Persons] OFF;
INSERT INTO [dbo].[Persons] (FirstName,LastName)
VALUES ('JANE','DOE');
INSERT INTO Persons (FirstName,LastName)
VALUES ('JOE','BROWN');
Выход из таблицы [dbo].[Человек] будет:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
SET IDENTITY_INSERT [dbo].[Persons] ON;
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (5,'JOHN','WHITE');
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (3,'JACK','BLACK');
Выход из таблицы [dbo].[Человек] будет:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
3 BLACK JACK
5 WHITE JOHN
В сущности для этой таблицы, добавьте атрибут DatabaseGenerated выше столбец, для которого идентичность вставка устанавливается:
Пример:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TaskId { get; set; }
вы можете просто использовать эту инструкцию, например, если ваше имя таблицы школа. Перед установкой убедитесь, что параметр identity_insert имеет значение на и после вставки запроса включить параметр identity_insert от
SET IDENTITY_INSERT School ON
/*
insert query
enter code here
*/
SET IDENTITY_INSERT School OFF
Если вы используете при обновлении сервера SQL, вы, вероятно, пытаетесь вставить запись в поле autoincrement. При удалении столбца вставка, ваш скрипт должен работать.
<changeSet id="CREATE_GROUP_TABLE" >
<createTable tableName="GROUP_D">
<column name="GROUP_ID" type="INTEGER" autoIncrement="true">
<constraints primaryKey="true"/>
</column>
</createTable>
</changeSet>
<changeSet id="INSERT_UNKNOWN_GROUP" >
<insert tableName="GROUP_D">
<column name="GROUP_ID" valueNumeric="-1"/>
...
</insert>
</changeSet>
Есть предварительно упомянуто OperationId в запросе, который не должен быть там, как это авто increamented
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
так что ваш запрос будет
Insert table(OpDescription,FilterID)
values ('Hierachy Update',1)
Другая ситуация, чтобы проверить, что первичный ключ-это одно и то же имя как с классами, где только разница в том, что ваш первичный ключ имеет 'ид' приложил к ней или указать [Key] на первичные ключи, которые не связаны с тем, как класс называется.
Лучшим решением является использование GeneratedValue аннотация `(стратегия = ...), т. е.
в
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column ...
private int OperationID;
он говорит, что эта колонка создается база данных с помощью стратегии личности, и вы Дон'т должны заботиться о базе данных будет делать.
[DatabaseGenerated(DatabaseGeneratedOption.Тож)] в своей колонке primarykey и убедиться, что его тип данных **инт**. Если столбец является первичным ключом и имеет значение IsIDentity значение true, в SQL нет необходимости в этой строке кода
[DatabaseGenerated(DatabaseGeneratedOption.Идентичности)]`[DatabaseGenerated(DatabaseGeneratedOption.Идентичности)]
Я'м не уверен, что использовать для и"вставить таблицу" это, но если вы're просто пытаюсь вставить некоторые значения попробовать:
Insert Into [tablename] (OpDescription,FilterID)
values ('Hierachy Update',1);
У меня было такое же сообщение об ошибке, но я думаю, что это должно работать. Идентификатор должен автоинкремент автоматически, как долго, как это'с первичным ключом.
Проблема, поднятая с помощью нетиповые DbContext или в dbset, если вы используете интерфейс и реализовать метод SaveChanges в общем виде
Если это ваш случай, предлагаю типизированы DBContex например
MyDBContext.MyEntity.Add(mynewObject)
потом .Метод SaveChanges
будет работать
Просто удалить таблицы, которые тащат в свой .dbml файл и повторно перетащить их снова. Затем очистить решение>перестроить решение> построить решение.
Вот что работает для меня.
Я не сделал стол по моим собственным, я использую против и SSMS, я следовал по этой ссылке Identity ASP.NET :https://docs.microsoft.com/en-us/aspnet/identity/overview/getting-started/adding-aspnet-identity-to-an-empty-or-existing-web-forms-project