在我的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");
}
}
答案 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>