我正在使用迁移来创建和播种数据库。由于我的数据库在与Web应用程序不同的服务器上运行,因此我使用脚本迁移来生成可以在数据库服务器上运行的脚本。
根据官方EF Core Docs,我们可以使用HasData为我们的实体配置种子数据。是否可以通过身份角色或用户做到这一点?
答案 0 :(得分:0)
对于通过HasData
播种数据,通常将其用于您自己定义的模型。
要为IdentityUser
或IdentityRole
播种数据,建议使用UserManager<IdentityUser>
和RoleManager<IdentityRole>
。这是由于HasData
和PasswordHash
之类的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"
}
);
}