如何解决如何一次创建多个角色? 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将相同。您只需更改角色名称即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。