.NET Core(.NET 5)通过Code First迁移修改ASPNetUsers主键为bigint
修改ASP.NET Core Identity用户主键为bigint(Int64)的步骤
1. 修改ApplicationUser继承关系
默认IdentityUser的主键类型为string,你需要改用指定主键类型的泛型重载IdentityUser<TKey>:
public class ApplicationUser : IdentityUser<long> { [Required] [StringLength(100)] public string FirstName { get; set; } [Required] [StringLength(100)] public string LastName { get; set; } [Required] [Column(TypeName = "VARCHAR")] [StringLength(20)] public string SAPNo { get; set; } [Required] [Column(TypeName = "VARCHAR")] [StringLength(150)] public string Position { get; set; } [Required] [Column(TypeName = "VARCHAR")] [StringLength(150)] public string EmailAddress { get; set; } [Required] public Int64 DepartmentId { get; set; } [Required] public int LocationId { get; set; } [Required] public int RoleId { get; set; } [Column(TypeName = "VARCHAR")] [StringLength(20)] public string CreatedBy { get; set; } public string CreatedDate { get; set; } public bool IsActive { get; set; } = true; }
2. 修改ApplicationDbContext继承关系
需要同时更新IdentityDbContext的泛型参数,把所有Identity相关表的主键都同步为long类型,同时注意你原代码中DbContextOptions的泛型参数有误,需要改为ApplicationDbContext:
// 无自定义角色类时直接使用IdentityRole<long>即可 public class ApplicationDbContext : IdentityDbContext<ApplicationUser, IdentityRole<long>, long> { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } }
3. 更新服务注册配置
修改Program.cs(.NET 6+)或Startup.cs中的Identity服务注册逻辑,同步指定主键类型:
builder.Services.AddIdentity<ApplicationUser, IdentityRole<long>>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders();
4. 生成并执行迁移
- 若为新项目无生产数据,直接删除Migrations文件夹下所有旧迁移文件,删除现有数据库
- 执行包管理器控制台命令生成新迁移:
Add-Migration ChangeUserIdToBigInt - 执行迁移更新数据库:
Update-Database
若已有生产数据不可删除,需要手动修改迁移文件的转换逻辑,把原有
nvarchar(450)类型的Id字段转换为bigint,同时同步所有关联外键字段的类型,避免数据丢失。
内容的提问来源于stack exchange,提问作者frank3579
相关产品推荐
相关产品推荐

