AddToRoleAsync抛出奇怪的SQL错误

时间:2017-03-06 04:12:21

标签: sql-server-2012 asp.net-core asp.net-identity asp.net-identity-3 asp.net-core-identity

在我的ASP.NET MVC Core 1.1应用中,以下代码最后一行中的AddToRoleAsync调用抛出了错误The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.这有点奇怪因为我没有在SQL Server或其他任何地方运行任何其他事务。我一般都知道这个T-SQL错误。但我不清楚为什么下面的AddToRoleAsync调用会引发此错误。请注意,以下代码在将错误引入下一行代码之前成功创建了用户。

List<String> usersList = GetAllUsers();

foreach (string s in usersList)
{
    var user = new ApplicationUser { UserName = s, UserRole = "TestRole" };
    var result = await _userManager.CreateAsync(user, "testpassword");

    if (result.Succeeded)
    {
       var result_1 = await _userManager.AddToRoleAsync(user, "TestRole");
    }
}

1 个答案:

答案 0 :(得分:0)

Microsoft在使用.Net Core应用时更改了[AspNetRoles]和其他人的结构。现在,当您向[AspNetRoles]添加新的角色声明时,您也应该声明角色NormalizedName例如:

var role = "Manager";

var newRole = new IdentityRole()
{
    Name = role,
    NormalizedName = role.ToUpper() // Mandatory.
};

//! Adding the new Role into database and saving
await _apiDbContext.Roles.AddAsync(newRole);
await _apiDbContext.SaveChangesAsync();

NormalizedName 角色变量设置为大写,可让您使用:AddToRoleAsync,而不会出现任何奇怪的错误。

var currentUser = await _userManager.FindByEmailAsync(user.Email);
await _userManager.AddToRoleAsync(currentUser, "Manager");
  

_userManager属于 UserManager<YourIdentityUser>