[英]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:違反主鍵約束“PK_AspNetRoles”。 無法在 object 'dbo.AspNetRoles' 中插入重復鍵。 重復鍵值為 (f32270bc-a54a-42a4-8968-9e402ddaeb0e)。 該語句已終止。
第一個角色“老師”的主鍵在第二個角色“學生”的循環過程中沒有改變的問題。 於是出現了約束沖突。
那么,如何在“異步等待”任務中一次創建多個角色?
您可以像這樣更改代碼:
[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();
它將為角色創建一個 ID。在您的代碼中,您將代碼放在 for 循環之外,因此當您運行await roleManager.CreateAsync(role);
,role.Id 是一樣的。你只改變角色的名字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.