1. 新建class ApplicationUser
//继承IdentityUser进行新增一些自定义字段
public class ApplicationUser : IdentityUser
{
//补充的新字段
public string Address { get; set; }
//shoppingCart
//orders
// 用户角色 用户权限 用户信息 用户登录tokens 重新绑定与父类的关系 命名必须和父类一致
public virtual ICollection<IdentityUserRole<string>> UserRoles { get; set; }
public virtual ICollection<IdentityUserClaim<string>> Claims { get; set; }
public virtual ICollection<IdentityUserLogin<string>> Logins { get; set; }
public virtual ICollection<IdentityUserToken<string>> Tokens { get; set; }
}
2. 全局用到IdentityUser的地方替换ApplicationUser(禁止替换migration 生成的数据源文件)
3. 设置基础数据
//初始化用戶与角色的种子数据
//1. 更新用戶与角色的外鍵
modelBuilder.Entity<ApplicationUser>(
u => u.HasMany(x => x.UserRoles).WithOne().HasForeignKey(ur => ur.UserId).IsRequired()
);
//2. 添加管理员角色
var adminRoleId = "f8df1775-e889-46f4-acdd-421ec8d9ba64";
modelBuilder.Entity<IdentityRole>().HasData(
new IdentityRole()
{
Id = adminRoleId,
Name = "Admin",
NormalizedName = "Admin".ToUpper()
}
);
//3. 添加用户
var adminUserId = "f8df1775-e889-46f4-acdd-421ec8d9ba65";
ApplicationUser adminUser = new ApplicationUser
{
Id = adminUserId,
UserName = "admin@qq.com",
NormalizedEmail = "admin@qq.com".ToUpper(),
Email = "admin@qq.com",
TwoFactorEnabled = false,
EmailConfirmed = true,
PhoneNumber = "123456789",
PhoneNumberConfirmed = false,
};
var ph = new PasswordHasher<ApplicationUser>();
adminUser.PasswordHash = ph.HashPassword(adminUser, "lah123465.");
modelBuilder.Entity<ApplicationUser>().HasData(adminUser);
//4. 给用户加入管理员角色
modelBuilder.Entity<IdentityUserRole<string>>().HasData(
new IdentityUserRole<string>()
{
RoleId = adminRoleId,
UserId = adminUserId
}
);
4. 更新数据库