userManager.AddToRoleAsync() - Σφάλμα:ο ρόλος δεν υπάρχει

userManager.AddToRoleAsync() - Σφάλμα:ο ρόλος δεν υπάρχει

Δεν μπορώ να δημοσιεύσω ακόμη σχόλια για να σας ρωτήσω, οπότε το σφάλμα σας λέει χρήστης ο διαχειριστής δεν υπάρχει ή ρόλος δεν υπάρχει? Προσπάθησα να αντιγράψω τον κώδικά σας στο άκρο μου και αν ο χρήστης δεν υπάρχει, θα λάβετε ένα σφάλμα "ο χρήστης δεν μπορεί να είναι μηδενικός". Ωστόσο, εάν ο ρόλος δεν υπάρχει, θα λάβετε το σφάλμα "Ο ρόλος [ρόλος] δεν υπάρχει".

Υποθέτω ότι έχετε ήδη προσθέσει τον ρόλο στη βάση δεδομένων σας; Ακολουθεί κάποιος κώδικας που χρησιμοποίησα στη μέθοδο seed μου που ουσιαστικά κάνει αυτό που θέλετε, μείον τη χρήση των προβολών για να το κάνετε:

        // Add the Admin role to the database
        IdentityResult roleResult;
        bool adminRoleExists = await _roleManager.RoleExistsAsync("Admin");
        if (!adminRoleExists)
        {
            _logger.LogInformation("Adding Admin role");
            roleResult = await _roleManager.CreateAsync(new IdentityRole("Admin"));
        }

        // Select the user, and then add the admin role to the user
        ApplicationUser user = await _userManager.FindByNameAsync("sysadmin");
        if (!await _userManager.IsInRoleAsync(user, "Admin"))
        {
            _logger.LogInformation("Adding sysadmin to Admin role");
            var userResult = await _userManager.AddToRoleAsync(user, "Admin");
        }

ΕΠΕΞΕΡΓΑΣΙΑ

Ο τρόπος με τον οποίο προσθέτετε ρόλους αυτή τη στιγμή αφήνει το πεδίο NormalizedName στον πίνακα ρόλων μηδενικό, το οποίο πιστεύω ότι χρησιμοποιείται από το πλαίσιο για την προσθήκη ρόλων στους χρήστες. Δοκιμάστε ένα από τα παρακάτω για να προσθέσετε έναν ρόλο στη βάση δεδομένων αντί για αυτό που κάνετε αυτήν τη στιγμή:

var result = await _roleManager.CreateAsync(new IdentityRole(rolename));

Ή μπορεί επίσης να λειτουργήσει (δεν το έχω δοκιμάσει όμως):

[HttpPost]
public IActionResult Create(string rolename)
{
        _db.Roles.Add(new IdentityRole()
        {
            Name = rolename,
            NormalizedName = rolename.ToUpper()
        });
        _db.SaveChanges();
        ViewBag.ResultMessage = "Role created successfully!";
        return RedirectToAction("Index");
}

Βεβαιωθείτε ότι όταν δημιουργείτε ένα AspNetRole το NormalizedName δεν πρέπει να είναι μηδέν για το UserManager για να λειτουργήσει σωστά.

Το NormalizedName πρέπει να είναι κεφαλαίο χρησιμοποιώντας .ToUpper()