通常管理员角色在创建架构时被植入数据库。您正在使用 Identity 创建或播种 管理员角色。 Identity 使用 Code-First 方法,以便您可以尽可能地对其进行自定义。不要手动使用 SQL 查询。以下是您可以使用 DI 在运行时创建具有管理员权限数据的 Admin User 的方法,因为 EFCore 尚不支持对播种数据的内置支持(它将在更新中支持)。 p>
要种子数据,在数据文件夹中创建一个类(例如AdministratorSeedData.cs)并添加以下代码。
public class AdministratorSeedData
{
private RoleManager<IdentityRole> _roleManager;
private UserManager<ApplicationUser> _userManager;
public AdministratorSeedData(UserManager<ApplicationUser> userManager, RoleManager<IdentityRole> roleManager)
{
_userManager = userManager;
_roleManager = roleManager;
}
public async Task EnsureSeedDataAsync()
{
if (await _userManager.FindByEmailAsync("someone@someone.com") == null)
{
ApplicationUser administrator = new ApplicationUser()
{
UserName = "someone@someone.com",
Email = "someone@someone.com"
};
await _userManager.CreateAsync(administrator, "Passw0rd123!");
await _roleManager.CreateAsync(new IdentityRole("Administrator"));
IdentityResult result = await _userManager.AddToRoleAsync(administrator, "Administrator");
}
}
}
然后在Startup.cs类中,在DI容器中注册这个服务为:
public void ConfigureServices(IServiceCollection services)
{
....
services.AddTransient<AdministratorSeedData>();
}
和
public async void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, AdministratorSeedData seeder)
{
....
await seeder.EnsureSeedDataAsync();
}
确保没有创建数据库。运行应用程序,您将看到具有管理员角色的用户已成功创建。