如何使用脚本迁移将身份角色植入ASP.NET Core 2.2?

时间:2019-03-14 00:12:48

标签: asp.net-core asp.net-core-identity asp.net-core-2.2

我正在使用迁移来创建和播种数据库。由于我的数据库在与Web应用程序不同的服务器上运行,因此我使用脚本迁移来生成可以在数据库服务器上运行的脚本。

根据官方EF Core Docs,我们可以使用HasData为我们的实体配置种子数据。是否可以通过身份角色或用户做到这一点?

2 个答案:

答案 0 :(得分:0)

对于通过HasData播种数据,通常将其用于您自己定义的模型。

要为IdentityUserIdentityRole播种数据,建议使用UserManager<IdentityUser>RoleManager<IdentityRole>。这是由于HasDataPasswordHash之类的ConcurrencyStamp可能无法正确设置许多属性。

检查此问题How to seed the ASP.NET Identity model, and related seeding questions #736

答案 1 :(得分:0)

您可以在OnModelCreating()方法中进行操作。请注意,必须预先定义键,以避免每次执行该方法时播种新角色。下面的代码将创建一个新用户和一个新角色,并将该角色与该用户相关联:

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        
        base.OnModelCreating(modelBuilder);

        //Seeding a  'Administrator' role to AspNetRoles table
        modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole {Id = "2c5e174e-3b0e-446f-86af-483d56fd7210", Name = "Administrator", NormalizedName = "ADMINISTRATOR".ToUpper() });


        //a hasher to hash the password before seeding the user to the db
        var hasher = new PasswordHasher<IdentityUser>();


        //Seeding the User to AspNetUsers table
        modelBuilder.Entity<IdentityUser>().HasData(
            new IdentityUser
            {
                Id = "8e445865-a24d-4543-a6c6-9443d048cdb9", // primary key
                UserName = "myuser",
                NormalizedUserName = "MYUSER",
                PasswordHash = hasher.HashPassword(null, "Pa$$w0rd")
            }
        );


        //Seeding the relation between our user and role to AspNetUserRoles table
        modelBuilder.Entity<IdentityUserRole<string>>().HasData(
            new IdentityUserRole<string>
            {
                RoleId = "2c5e174e-3b0e-446f-86af-483d56fd7210", 
                UserId = "8e445865-a24d-4543-a6c6-9443d048cdb9"
            }
        );
        

    }