gpt4 book ai didi

c# - ASP.NET 核心身份种子只创建最后一个用户

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:04 25 4
gpt4 key购买 nike

它只创建一个 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");
}

//...
}
}

关于c# - ASP.NET 核心身份种子只创建最后一个用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50450859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com