是否可以/建议使用EFCore 2.1数据播种系统播种用户/角色?

时间:2018-06-07 13:39:50

标签: 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中运行的静态种子方法吗?

1 个答案:

答案 0 :(得分:1)

如果您想将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中,而不是在其中创建一个新用户。 我不知道这是否比启动种子更好,但这是做到这一点的一种方法。