Dav*_*ick 6 entity-framework-core asp.net-core
从 EFCore 2.1 开始,可以使用 DbContext OnModelCreating 方法为数据做种。
https://docs.microsoft.com/en-us/ef/core/modeling/data-seeding
然而,用户/角色的创建通常由 UserManager/RoleManager 处理。
现在,我可以手动创建角色或用户 - 但例如在用户的情况下,我需要自己散列密码(而且我不知道 UserManager 使用什么散列方法而不深入研究源)
有没有办法解决?或者我应该像以前版本的 Entity Framework Core 一样坚持使用在启动时运行的静态播种方法?
如果你想将OnModelCreating方法与HasData方法一起使用,你可以这样做:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
ApplicationUser appUser = new ApplicationUser
{
UserName = "tester",
Email = "tester@test.com",
NormalizedEmail = "tester@test.com".ToUpper(),
NormalizedUserName = "tester".ToUpper(),
TwoFactorEnabled = false,
EmailConfirmed = true,
PhoneNumber = "123456789",
PhoneNumberConfirmed = false
};
PasswordHasher<ApplicationUser> ph = new PasswordHasher<ApplicationUser>();
appUser.PasswordHash = ph.HashPassword(appUser, "Your-PW1");
modelBuilder.Entity<IdentityRole>().HasData(
new IdentityRole { Name = "Admin", NormalizedName = "ADMIN" },
new IdentityRole { Name = "User", NormalizedName = "USER"}
);
modelBuilder.Entity<ApplicationUser>().HasData(
appUser
);
}
Run Code Online (Sandbox Code Playgroud)
如果您在方法之外创建用户,HasData则可以使用PasswordHasher. 它将为您散列密码。然后只需将创建的用户放入其中,HasData而不是在那里创建新用户。我不知道这是否比启动时播种更好,但这是做到这一点的一种方法。
| 归档时间: |
|
| 查看次数: |
848 次 |
| 最近记录: |