AspNetUsers表Id改为Long后创建用户遇IDENTITY_INSERT错误求助
解决AspNetUsers Id改为Long自增后创建用户的SqlException问题
你遇到的问题核心是:把AspNetUsers的Id改成自增Long类型后,ASP.NET Identity框架还在尝试给Id字段赋值,而数据库的自增列在IDENTITY_INSERT关闭状态下不允许显式插入值。下面是具体的解决方案:
问题根源
默认情况下,ASP.NET Identity使用string类型的Guid作为用户表主键。当你将Id改为long并设置为自增(identity:true)后,如果Identity框架没有被正确配置为适配long类型主键,它依然会尝试生成Guid并赋值给Id,这就触发了数据库的错误。
具体解决方案
1. 修正ApplicationUser类的定义
让你的ApplicationUser继承泛型版本的IdentityUser<long>,明确指定主键类型为long:
public class ApplicationUser : IdentityUser<long> { // 你的自定义属性 public string FullName { get; set; } public long? CreatedBy { get; set; } public DateTime? CreatedDate { get; set; } public DateTime? ModifiedDate { get; set; } public long? ModifiedBy { get; set; } public bool IsDeleted { get; set; } }
2. 更新UserManager和RoleManager的泛型类型
对应的用户管理器和角色管理器也要适配long类型主键:
// 用户管理器 public class ApplicationUserManager : UserManager<ApplicationUser, long> { public ApplicationUserManager(IUserStore<ApplicationUser, long> store) : base(store) { } // 可在此添加自定义用户管理逻辑 } // 角色管理器 public class ApplicationRoleManager : RoleManager<IdentityRole<long>, long> { public ApplicationRoleManager(IRoleStore<IdentityRole<long>, long> store) : base(store) { } }
3. 调整DbContext的继承关系
你的数据库上下文需要继承泛型的IdentityDbContext,指定用户、角色和主键类型:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, IdentityRole<long>, long> { public ApplicationDbContext() : base("YourConnectionStringName") { } // 其他DbSet定义... }
4. 显式配置Id为自增(可选但推荐)
在DbContext的OnModelCreating方法中,明确配置Id列的自增属性,确保EF和数据库的配置一致:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // 配置ApplicationUser的Id为自增 modelBuilder.Entity<ApplicationUser>() .Property(u => u.Id) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); }
5. 修正创建用户代码中的类型错误
你的代码里有个明显的类型不匹配问题:user.CreatedBy = string.Empty;,但数据库里CreatedBy是long?类型,应该改成:
user.CreatedBy = null; // 或者传入对应的long类型创建者ID(如果有)
验证步骤
- 完成所有修改后,重新生成迁移并更新数据库(若需要)
- 运行创建用户的代码,此时Identity框架会停止给Id赋值,由数据库自动生成自增的long值,就不会触发
IDENTITY_INSERT的错误了
内容的提问来源于stack exchange,提问作者Ashish
相关产品推荐
相关产品推荐

