asp.net-core - 是否可以/建议使用 EFCore 2.1 数据播种系统为用户/角色播种?

标签 asp.net-core entity-framework-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
        );
    }

如果您在 HasData 方法之外创建用户,则可以使用 PasswordHasher
它将为您散列密码。然后只需将创建的用户放入 HasData 中,而不是在那里创建一个新用户。
我不知道这是否比在启动时播种更好,但这是一种方法。

关于asp.net-core - 是否可以/建议使用 EFCore 2.1 数据播种系统为用户/角色播种?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50742754/

相关文章:

asp.net-core - VS 2015 中的 Asp.net Core EF

mysql - ASP.Net Core - EntityFrameworkCore 数据没有添加,而是更新

c# - Entity Framework 核心 : Cannot insert explicit value for identity column in table 'Relation' when IDENTITY_INSERT is set to OFF

c# - EPPlus - 保存在内存中创建的 excel 并在 excel 上打开它会出错

visual-studio-2015 - 如何在 Visual Studio 2015 中设置 ASP.NET Core Web 应用程序的 URL

c# - 如何将 JsonPatchDocument 作为发布对象中的属性传递?

c# - Entity Framework Core 2(代码优先)更新值不起作用

entity-framework - EF Core查询多个表之间的条件

azure - 从浏览器应用程序联系我的 ASP.NET Core 3.1 API 时,无法在访问 token 中看到角色声明

javascript - 从 Angular 8 中的 http 响应读取错误状态代码时为 "Cannot read property message of null"