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

如何修改ASP.NET Core Identity中AspNetUsers的主键数据类型

将.NET Core Identity的AspNetUsers主键从GUID改为Int的具体操作步骤
  • 自定义用户类,指定主键类型为int
    默认的IdentityUser主键是Guid,我们需要继承泛型版本的IdentityUser<int>来定义自己的用户类:

    public class ApplicationUser : IdentityUser<int>
    {
        // 按需添加自定义属性,无额外需求可留空
    }
    
  • 更新DbContext,适配int主键的用户类
    把继承的IdentityDbContext改成带泛型参数的版本,指定用户类、角色类(同样用int主键)和主键类型:

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser, IdentityRole<int>, int>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }
    }
    

    要是项目里用到了IdentityUserClaim、IdentityUserRole等其他Identity实体,也要同步改成int泛型版本(比如IdentityUserClaim<int>),如果DbContext里声明了这些实体的DbSet,记得更新类型。

  • 调整服务配置(Startup/Program.cs)
    在注册Identity服务时,指定我们的自定义用户类和int主键的角色类:
    用AddDefaultIdentity的场景:

    builder.Services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();
    

    用AddIdentity的场景:

    builder.Services.AddIdentity<ApplicationUser, IdentityRole<int>>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();
    
  • 创建并执行数据库迁移
    打开终端或包管理器控制台,先创建迁移文件:

    Add-Migration ChangeAspNetUsersPrimaryKeyToInt
    

    再执行迁移更新数据库:

    Update-Database
    

    ⚠️ 注意:如果是已有数据的数据库,一定要先备份数据。修改主键类型会影响关联的外键表(比如AspNetUserClaims、AspNetUserRoles等),需要手动处理数据映射(比如给现有用户分配唯一int主键,同步更新外键字段的值);如果是全新数据库,直接执行迁移即可。

  • 更新项目中其他相关代码
    所有用到IdentityUser的地方,都要替换成ApplicationUser,比如用户管理器的注入、登录注册逻辑:

    // 原来的UserManager<IdentityUser>替换为UserManager<ApplicationUser>
    private readonly UserManager<ApplicationUser> _userManager;
    public AccountController(UserManager<ApplicationUser> userManager)
    {
        _userManager = userManager;
    }
    

    视图文件里的相关注入也要同步更新,比如@inject UserManager<ApplicationUser> UserManager

内容的提问来源于stack exchange,提问作者Ajmal-Hossain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:05:26