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

自定义User实体替换IdentityUser时CustomUserStore报错问题

ASP.NET Core Identity自定义User实体替换默认IdentityUser的问题解决

问题背景

自定义了继承自IdentityUser<int>的User实体扩展字段:

namespace Domain.Entities.Security
{
     public class User : IdentityUser<int>
        {
            public string? FullName { get; set; }
            public string? UIN { get; set; }
      }
}

将CustomUserStore泛型参数从默认IdentityUser改为自定义User后出现错误,需确认是否可替换及修正方法。

解决方案

完全可以用自定义User替代默认IdentityUser,错误源于修改不完整,需同步调整以下关键部分:

1. 同步自定义Role实体(若使用角色功能)

因自定义User使用了int类型主键,Role需对应继承IdentityRole<int>以保持主键类型一致:

public class Role : IdentityRole<int>
{
    // 可按需添加自定义角色字段
}

2. 更新自定义Store的泛型参数

将CustomUserStore和CustomRoleStore的泛型参数替换为自定义的User和Role:

public class CustomUserStore : UserStore<User>
{
    public CustomUserStore(CPSContext context)
        : base(context)
    {
        AutoSaveChanges = false;
    }
}

public class CustomRoleStore : RoleStore<Role>
{
    public CustomRoleStore(CPSContext context)
        : base(context)
    {
        AutoSaveChanges = false;
    }
}

3. 修正服务注册代码

替换所有默认IdentityUser、IdentityRole为自定义类型,确保IUserStore和IRoleStore的泛型参数匹配:

services.AddIdentity<User, Role>()
        .AddEntityFrameworkStores<CPSContext>()
        .AddDefaultTokenProviders();

services.AddTransient<IUserStore<User>, CustomUserStore>();
services.AddTransient<IRoleStore<Role>, CustomRoleStore>();

4. 调整DbContext配置

让CPSContext继承IdentityDbContext<User, Role, int>,并添加自定义实体的DbSet:

public class CPSContext : IdentityDbContext<User, Role, int>
{
    public CPSContext(DbContextOptions<CPSContext> options)
        : base(options)
    {
    }

    public DbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:23:32