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>