c# - ASP.NET 核心标识种子只创建最后一个用户
问题描述
它只创建了一个 ADMIN 用户,因为这是在下面的代码中创建的最后一个用户。即使我逐步完成并且一切都成功了。这与我做异步错误并且没有完成第一个操作有关吗?(创建用户)
public class DbInitializer
{
public static async void Initialize(IApplicationBuilder app)
// public static void Initialize(IApplicationBuilder app)
……
if (!roleManager.RoleExistsAsync("Administrator").Result)
{
IdRoleResult = await roleManager.CreateAsync(new IdentityRole("Administrator"));
// IdRoleResult = roleManager.CreateAsync(new IdentityRole("Administrator")).Result;
if (!IdRoleResult.Succeeded)
throw new Exception("Administrator role wasnt created.");
}
if (!roleManager.RoleExistsAsync("User").Result)
{
IdUserResult = await roleManager.CreateAsync(new IdentityRole("User"));
// IdUserResult = roleManager.CreateAsync(new IdentityRole("User")).Result;
if (!IdUserResult.Succeeded)
throw new Exception("User role wasnt created.");
}
//If there are no users, create a test user and test admin. Assign roles
if (!context.Users.Any())
{
var user = new ApplicationUser
{
UserName = "user@user.com",
UserFirstName = "Firstname",
UserLastName = "LastName",
Email = "user@user.com",
UserSchool = "University of Maryland",
RefMedSchoolId = 1,
EmailConfirmed = false,
LockoutEnabled = false
};
// var resultUser = userManager.CreateAsync(user, "Password123!").Result;
// var resultUserRole = userManager.AddToRoleAsync(user, "User").Result;
var resultUser = await userManager.CreateAsync(user, "Password123!");
var resultUserRole = await userManager.AddToRoleAsync(user, "User");
var admin = new ApplicationUser
{
UserName = "admin@admin.com",
UserFirstName = "Firstname",
UserLastName = "LastName",
Email = "admin@admin.com",
UserSchool = "University of Maryland",
RefMedSchoolId = 1,
EmailConfirmed = false,
LockoutEnabled = false
};
// var resultAdmin = userManager.CreateAsync(admin, "Password123!").Result;
// var resultAdministratorRole = userManager.AddToRoleAsync(admin, "Administrator").Result;
var resultAdmin = await userManager.CreateAsync(admin, "Password123!");
var resultAdministratorRole = await userManager.AddToRoleAsync(admin, "Administrator");
解决方案
这段代码应该一直是异步的,而不是混合异步和阻塞调用,比如.Result
. 方法签名也应该是async Task
而不是async void
。
public class DbInitializer {
public static async Task Initialize(IApplicationBuilder app) {
//... ...
if (! await roleManager.RoleExistsAsync("Administrator")) {
IdRoleResult = await roleManager.CreateAsync(new IdentityRole("Administrator"));
if (!IdRoleResult.Succeeded)
throw new Exception("Administrator role wasnt created.");
}
if (! await roleManager.RoleExistsAsync("User")) {
IdUserResult = await roleManager.CreateAsync(new IdentityRole("User"));
if (!IdUserResult.Succeeded)
throw new Exception("User role wasnt created.");
}
//If there are no test user, create a test user and assign roles
if (await userManager.FindByNameAsync("user@user.com") == null) {
var user = new ApplicationUser {
UserName = "user@user.com",
UserFirstName = "Firstname",
UserLastName = "LastName",
Email = "user@user.com",
UserSchool = "University of Maryland",
RefMedSchoolId = 1,
EmailConfirmed = false,
LockoutEnabled = false
};
var resultUser = await userManager.CreateAsync(user, "Password123!");
var resultUserRole = await userManager.AddToRoleAsync(user, "User");
}
//If there are no test admin, create a test admin and assign roles
if (await userManager.FindByNameAsync("admin@admin.com") == null) {
var admin = new ApplicationUser {
UserName = "admin@admin.com",
UserFirstName = "Firstname",
UserLastName = "LastName",
Email = "admin@admin.com",
UserSchool = "University of Maryland",
RefMedSchoolId = 1,
EmailConfirmed = false,
LockoutEnabled = false
};
var resultAdmin = await userManager.CreateAsync(admin, "Password123!");
var resultAdministratorRole = await userManager.AddToRoleAsync(admin, "Administrator");
}
//...
}
}
推荐阅读
- python - 我如何计算重复的行数?
- javascript - React 在 *.map 内渲染时不会渲染数组的第一个对象
- c# - 结合 backgroundworker 和 multitread C#
- vba - Vba 计数范围内具有特定颜色的单元格,由条件格式着色
- excel - 如果单元格为空白,VBA 代码删除行不起作用
- python - 如何仅更改熊猫数据框中仅具有特定数字总和的组的最大值
- python-3.x - 断言失败:预测必须 >= 0,条件 x >= y 在元素上不成立
- angular - 角度解析未设置 ActivatedRoute 数据
- sql - SQL 查询 - 将编码转换为 UTF-8
- c++ - 如何将预编译/预编译的 *.o 目标文件添加到 GN 中的可执行文件