【问题标题】:How to create many roles at once? (asp.net core)如何一次创建多个角色? (asp.net 核心)
【发布时间】:2020-12-06 21:40:34
【问题描述】:

我正在尝试开发一种算法,该算法可以在项目的首次使用开始时创建许多角色。 它需要像下面这样的“异步等待”任务。

    [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”。 无法在对象“dbo.AspNetRoles”中插入重复键。复制品 键值为 (f32270bc-a54a-42a4-8968-9e402ddaeb0e)。 声明已终止。

第一个角色“老师”的主键在第二个角色“学生”的循环过程中没有改变的问题。于是出现了约束冲突。

那么,如何在“异步等待”任务中一次创建多个角色?

【问题讨论】:

  • 我认为是因为这个:if (rolesCount == 0) 当 'rolesCount' 等于 0 并且你没有任何角色可以检查它们的长度时,你正在执行你的 'for' 循环。
  • @Arash 我需要在没有找到角色时创建角色,所以 if 没有错。
  • 如果我的回答对您有帮助,您可以标记一下吗?谢谢。

标签: c# asp.net-mvc asp.net-core roles


【解决方案1】:

您可以像这样更改您的代码:

[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);时,角色.Id将是相同的。您只需更改角色名称。

这是一个测试:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2021-03-24
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多