如何一次创建多个角色? (asp.net 核心)
How to create many roles at once? (asp.net core)
我正在尝试开发一种算法,在项目的首次使用开始时创建许多角色。
它需要像下面这样的“异步等待”任务。
[HttpGet]
public async Task<IActionResult> LoginAsync()
{
int rolesCount = roleManager.Roles.Count();
string[] roles = { "Teacher", "Student" };
var role = new IdentityRole();
if (rolesCount == 0)
{
for (int i = 0; i < roles.Length; i++)
{
if (!await roleManager.RoleExistsAsync(roles[i]))
{
role.Name = roles[i];
await roleManager.CreateAsync(role);
}
}
}
return View();
}
显示此错误
SqlException: Violation of PRIMARY KEY constraint 'PK_AspNetRoles'.
Cannot insert duplicate key in object 'dbo.AspNetRoles'. The duplicate
key value is (f32270bc-a54a-42a4-8968-9e402ddaeb0e).
The statement has been terminated.
第一个角色“老师”的主键在第二个角色“学生”的循环中没有改变的问题。所以出现了约束冲突。
那么,如何在“async await”任务中同时创建多个角色?
您可以这样更改代码:
[HttpGet]
public async Task<IActionResult> LoginAsync()
{
int rolesCount = roleManager.Roles.Count();
string[] roles = { "Teacher", "Student" };
if (rolesCount == 0)
{
for (int i = 0; i < roles.Length; i++)
{
if (!await roleManager.RoleExistsAsync(roles[i]))
{
var role = new IdentityRole();
role.Name = roles[i];
await roleManager.CreateAsync(role);
}
}
}
return View();
}
当你使用var role = new IdentityRole();
时,它会为你的代码role.In创建一个Id,你将代码放在for循环之外,所以当你运行 await roleManager.CreateAsync(role);
时, role.Id 将是 same.You 仅更改角色名称。
这是一个测试:
我正在尝试开发一种算法,在项目的首次使用开始时创建许多角色。 它需要像下面这样的“异步等待”任务。
[HttpGet]
public async Task<IActionResult> LoginAsync()
{
int rolesCount = roleManager.Roles.Count();
string[] roles = { "Teacher", "Student" };
var role = new IdentityRole();
if (rolesCount == 0)
{
for (int i = 0; i < roles.Length; i++)
{
if (!await roleManager.RoleExistsAsync(roles[i]))
{
role.Name = roles[i];
await roleManager.CreateAsync(role);
}
}
}
return View();
}
显示此错误
SqlException: Violation of PRIMARY KEY constraint 'PK_AspNetRoles'. Cannot insert duplicate key in object 'dbo.AspNetRoles'. The duplicate key value is (f32270bc-a54a-42a4-8968-9e402ddaeb0e). The statement has been terminated.
第一个角色“老师”的主键在第二个角色“学生”的循环中没有改变的问题。所以出现了约束冲突。
那么,如何在“async await”任务中同时创建多个角色?
您可以这样更改代码:
[HttpGet]
public async Task<IActionResult> LoginAsync()
{
int rolesCount = roleManager.Roles.Count();
string[] roles = { "Teacher", "Student" };
if (rolesCount == 0)
{
for (int i = 0; i < roles.Length; i++)
{
if (!await roleManager.RoleExistsAsync(roles[i]))
{
var role = new IdentityRole();
role.Name = roles[i];
await roleManager.CreateAsync(role);
}
}
}
return View();
}
当你使用var role = new IdentityRole();
时,它会为你的代码role.In创建一个Id,你将代码放在for循环之外,所以当你运行 await roleManager.CreateAsync(role);
时, role.Id 将是 same.You 仅更改角色名称。
这是一个测试: