自定义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
相关产品推荐
相关产品推荐

