0

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

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"); 
    } 
} 
+0

你有没有想出解决办法?我正在经历同样的事情。有趣的是,我只在Azure部署中遇到这个错误 - 我的本地开发环境中没有出现错误。 – ih303

+0

@ ih303如果我在关闭并重新启动项目后正确记得它开始工作。 – nam

回答

0

当使用.Net Core应用程序时,Microsoft更改了[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没有任何异样ERRS。

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

_userManager属于UserManager<YourIdentityUser>