微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何一次创建多个角色? asp.net核心

如何解决如何一次创建多个角色? asp.net核心

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

    [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)。 该声明已终止。

第二个角色“ Student”的循环期间,第一个角色“ Teacher”的主键未更改的问题。这样就会出现约束冲突。

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

解决方法

您可以这样更改代码:

[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将相同。您只需更改角色名称即可。

这是一个测试: enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。