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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:39:05