当我执行下面的脚本时,我有以下错误。错误是关于什么,如何解决?

Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)

错误:

服务器:Msg 544,级别16,状态1,线路1 当IDENTITY_INSERT设置为OFF时,无法为表'table'中的标识列插入显式值。


当前回答

要非常小心地将IDENTITY_INSERT设置为ON。这是一种糟糕的实践,除非数据库处于维护模式并设置为单用户。这不仅会影响您的插入,还会影响试图访问表的其他人的插入。

为什么要在单位字段中输入一个值?

其他回答

如果您正在使用liquibase更新SQL Server,则可能试图将记录键插入到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>

如果您使用Interface并以通用方式实现savechanges方法,则会出现使用非类型化DBContext或DBSet的问题

如果这是您的情况,我建议使用强类型的dbcontext

MyDBContext.MyEntity.Add(mynewObject)

那么,保存更改就可以了

每个人都评论SQL,但是在EntityFramework中发生了什么?我看了整篇文章,没人能解出EF。所以几天后,我找到了一个解决方案: 在EF Core的上下文中创建模型有这样一条指令:modelBuilder。实体<客户端>(实体=>{实体。属性(e => e.d id).ValueGeneratedNever();

这也会产生错误,解决方案:你必须通过ValueGeneratedOnAdd()改变它的工作!

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 });                
        });
        
    }

在我的例子中,我已经在modelBuilder的上下文中设置了另一个属性作为键。

modelBuilder.Entity<MyTable>().HasKey(t => t.OtherProp);

我必须设置正确的id

 modelBuilder.Entity<MyTable>().HasKey(t => t.Id);