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

ASP.NET Core 2.0修改用户ID数据类型为Long失败排查

解决Identity中用户ID改为long后的TypeLoadException错误

你遇到的这个问题其实是Identity服务注册时的类型不匹配导致的——你已经自定义了带long类型主键的ApplicationRole,但在Startup里注册Identity服务时,却用了默认的IdentityRole(它默认是string类型主键),这就和你的ApplicationUser(long主键)以及DbContext的泛型约束冲突了,所以抛出了TypeLoadException。

具体修改步骤

只需要调整Startup.cs里的AddIdentity调用,把第二个泛型参数换成你自定义的ApplicationRole即可:

public void ConfigureServices(IServiceCollection services) {
    //DbContext setup
    services.AddIdentity<ApplicationUser, ApplicationRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();
    //authentications, cookies and others
}

为什么之前的代码会报错?

UserStoreBase这个底层类对泛型参数TRole有约束:它必须继承自IdentityRole<TKey>,而你的TKey是long(因为ApplicationUser和DbContext都用了long作为主键类型)。但你之前传入的IdentityRole是默认的无泛型版本,本质是IdentityRole<string>,和long类型的主键不兼容,自然就违反了约束。

确保所有Identity组件的类型统一

你已经做对了大部分配置:

  • ApplicationUser继承IdentityUser<long>
  • ApplicationRole继承IdentityRole<long>
  • ApplicationDbContext继承IdentityDbContext<ApplicationUser, ApplicationRole, long>
    现在只需要把Startup里的Identity服务注册和上面的类型对齐,问题就解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:34:10