0

In meinem ASP.NET MVC-Core 1.1-Anwendung, die AddToRoleAsync Aufruf in der letzten Zeile des folgenden Codes wirft den Fehler: The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION. Dies ist irgendwie seltsam, da ich habe keine andere Transaktion, die auf SQL Server oder anderswo ausgeführt wird. Ich kenne diesen T-SQL-Fehler im Allgemeinen. Aber ich bin nicht klar, warum der folgende Aufruf AddToRoleAsync diesen Fehler wirft. Beachten Sie, dass der folgende Code erfolgreich einen Benutzer erstellt hat, bevor er den Fehler in der nächsten Codezeile ausgelöst hat.AddToRoleAsync wirft seltsame SQL-Fehler

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

Haben Sie das jemals herausgefunden? Ich habe das gleiche erlebt. Interessant ist, dass dieser Fehler nur bei meiner Azure-Bereitstellung auftritt. In meiner lokalen Entwicklungsumgebung wird kein Fehler angezeigt. – ih303

+0

@ ih303 Wenn ich mich nach dem Schließen und Neustarten des Projekts richtig erinnere, hat es angefangen zu arbeiten. – nam

Antwort

0

Microsoft verändert die Struktur von [AspNetRoles] und andere, wenn apps .Net-Core verwenden. Wenn Sie jetzt eine neue Rollenanweisung zu [AspNetRoles] hinzufügen, sollten Sie auch die Rolle NormalizedName deklarieren. Zum Beispiel:

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(); 

Einstellung der NormalizedName Rolle Variable in Großbuchstaben, lassen Sie mit: AddToRoleAsync ohne seltsame errs.

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

_userManager gehört UserManager<YourIdentityUser>