You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC报错SqlException:Users表IDENTITY_INSERT为OFF时无法插入标识列显式值

问题根因

该报错是SQL Server抛出的约束错误:你的Users表UserId列配置了IDENTITY自增属性,默认不允许手动插入该列的值,只有当IDENTITY_INSERT开关开启时才能手动赋值,当前插入语句显式指定了UserId的值,因此触发报错。

排查解决步骤
  • 检查DTO转User实体的映射逻辑,确保没有手动为UserId字段赋值。UserId为int类型,默认值为0,EF会自动识别默认值的自增主键无需包含在INSERT语句中,由数据库生成值。如果映射时错误给UserId赋了非0值,就会触发该错误。
  • 修正UserRepository中Create方法的错误写法:_context.SaveChanges()返回值是本次操作受影响的行数,并非新插入的自增ID值,你不需要手动为UserId赋值,EF在SaveChanges执行成功后,会自动将数据库生成的自增ID回写到user对象的UserId属性中。修正后的代码如下:
public User Create(User user)
{
    _context.Users.Add(user);
    _context.SaveChanges();
    return user;
}
  • 若上述两步执行后仍报错,检查数据库Users表的UserId列是否正确配置了IDENTITY自增属性。可能是EF迁移生成时出错导致表结构和实体注解不匹配,可删除现有迁移和数据库,重新生成迁移并更新库结构即可。
  • 仅当有特殊场景需要手动插入自增列值时,才需要临时开启IDENTITY_INSERT,普通用户注册场景无需使用该方案:
public User Create(User user)
{
    using var transaction = _context.Database.BeginTransaction();
    _context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT Users ON");
    _context.Users.Add(user);
    _context.SaveChanges();
    _context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT Users OFF");
    transaction.Commit();
    return user;
}

内容的提问来源于stack exchange,提问作者Riki Ham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:15:03