.NET 7中如何初始化管理员用户、角色并关联AspNetUserRoles表?
如何在空数据库中初始化AspNetUsers、AspNetRoles及关联表AspNetUserRoles
数据库创建后为空,我需要在AspNetUsers表中创建用户,AspNetRoles表中创建管理员角色,并在AspNetUserRoles表中关联两者以确保系统正常运行。目前我已经创建了用户和角色的配置类,但无法通过现有方法填充AspNetUserRoles表。
已实现的配置代码
用户配置类
public class AdminConfiguration : IEntityTypeConfiguration<User> { public void Configure(EntityTypeBuilder<User> builder) { var admin = new User { Id = "1", UserName = "masteradmin", NormalizedUserName = "MASTERADMIN", Email = "Admin@Admin.com", NormalizedEmail = "ADMIN@ADMIN.COM", PhoneNumber = "XXXXXXXXXXXXX", EmailConfirmed = true, PhoneNumberConfirmed = true, SecurityStamp = new Guid().ToString(), Password = "Password" }; admin.PasswordHash = PassGenerate(admin); builder.HasData(admin); } public string PassGenerate(User user) { var passHash = new PasswordHasher<User>(); return passHash.HashPassword(user, "password"); } }
角色配置类
public class RoleConfiguration : IEntityTypeConfiguration<IdentityRole> { public void Configure(EntityTypeBuilder<IdentityRole> builder) { var role = new IdentityRole { Id = "1", Name = "Admin", ConcurrencyStamp = "b35494cf-4040-47e3-a6de-dee4b6f8e250", NormalizedName = "ADMIN", }; builder.HasData(role); } }
DbContext配置
protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // 其他表关系配置代码... modelBuilder.ApplyConfiguration(new RoleConfiguration()); modelBuilder.ApplyConfiguration(new AdminConfiguration()); }
解决方案:添加AspNetUserRoles的种子数据
AspNetUserRoles是Identity框架的关联表,用于绑定用户和角色,你需要直接为这个表配置种子数据,以下是两种实现方式:
方法1:直接在DbContext中配置
修改OnModelCreating方法,添加用户与角色的关联数据:
protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // 其他表关系配置代码... modelBuilder.ApplyConfiguration(new RoleConfiguration()); modelBuilder.ApplyConfiguration(new AdminConfiguration()); // 添加用户角色关联数据 modelBuilder.Entity<IdentityUserRole<string>>().HasData( new IdentityUserRole<string> { UserId = "1", // 与之前创建的管理员用户ID一致 RoleId = "1" // 与之前创建的管理员角色ID一致 } ); }
方法2:创建单独的配置类
如果希望代码结构更清晰,可以创建专门的配置类:
public class UserRoleConfiguration : IEntityTypeConfiguration<IdentityUserRole<string>> { public void Configure(EntityTypeBuilder<IdentityUserRole<string>> builder) { builder.HasData( new IdentityUserRole<string> { UserId = "1", RoleId = "1" } ); } }
然后在OnModelCreating中应用该配置:
modelBuilder.ApplyConfiguration(new UserRoleConfiguration());
关键注意事项
- 必须保证
UserId和RoleId与用户、角色配置中的ID完全匹配,否则关联关系不生效。 - 执行数据库迁移命令(
Add-Migration和Update-Database)后,AspNetUserRoles表会自动填充关联数据。 - 若使用自定义主键类型(如int而非string),需将
IdentityUserRole<string>替换为对应的IdentityUserRole<int>。
内容的提问来源于stack exchange,提问作者Mojtaba
相关产品推荐
相关产品推荐

