簡體   English   中英

如何一次創建多個角色? (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:違反主鍵約束“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM