当我执行下面的脚本时,我有以下错误。错误是关于什么,如何解决?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
错误:
服务器:Msg 544,级别16,状态1,线路1 当IDENTITY_INSERT设置为OFF时,无法为表'table'中的标识列插入显式值。
当我执行下面的脚本时,我有以下错误。错误是关于什么,如何解决?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
错误:
服务器:Msg 544,级别16,状态1,线路1 当IDENTITY_INSERT设置为OFF时,无法为表'table'中的标识列插入显式值。
当前回答
设置该字段的身份增量时,不能在“OperationID”列中插入数据。
不要在该字段中输入值,它将自动设置。
Insert table(OpDescription,FilterID)
values ('Hierachy Update',1)
其他回答
如果你在SQL服务器上得到这个错误,然后运行这个查询-
SET IDENTITY_INSERT tableName ON
这只适用于数据库的一个表 例:如果表名是student,那么查询如下:
SET IDENTITY_INSERT student ON
如果你在你的web应用程序或你使用实体框架得到这个错误,那么首先在SQL服务器上运行这个查询,并更新你的实体模型(。Edmx文件)并构建您的项目,此错误将被解决
要非常小心地将IDENTITY_INSERT设置为ON。这是一种糟糕的实践,除非数据库处于维护模式并设置为单用户。这不仅会影响您的插入,还会影响试图访问表的其他人的插入。
为什么要在单位字段中输入一个值?
在您的查询中有前面提到的OperationId,它不应该在那里,因为它是自动递增的
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
所以你的问题是
Insert table(OpDescription,FilterID)
values ('Hierachy Update',1)
最好的解决方案是使用GeneratedValue(strategy =…)注释,即。
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column ...
private int OperationID;
它说,这个列是由数据库使用IDENTITY策略生成的,你不需要关心-数据库会做的。
EF Core 3.x
引用Leniel Maccaferri,我有一个带有自动递增属性的表,称为ID(原始主键)和另一个属性称为Other_ID(新的主键)。最初ID是主键,但后来Other_ID需要成为新的主键。由于ID正在应用程序的其他部分使用,我不能只是从表中删除它。Leniel Maccaferri解决方案只适用于我之后,我添加了以下片段:
entity.HasKey(x => x.Other_ID);
entity.Property(x => x.ID).ValueGeneratedOnAdd();
完整代码片段如下(ApplicationDbContext.cs):
protected override void OnModelCreating(ModelBuilder builder)
{
builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
base.OnModelCreating(builder);
builder.Entity<tablename>(entity =>
{
entity.HasKey(x => x.Other_ID);
entity.Property(x => x.ID).ValueGeneratedOnAdd();
entity.HasAlternateKey(x => new { x.Other_ID, x.ID });
});
}