ASP.NET 5 MVC 6 e Entity Framework 7 Problemi

asp.net-core asp.net-core-mvc c# entity-framework-core

Domanda

Non possiamo aggiungere insieme Owin ed Entity Framework 7. Mentre lo facciamo, ci sarà un'ambiguità tra Microsoft.AspNet.Identity.core 2.0.0.0 e Microsoft.AspNet.Identity 3.0.0 Beta1

Pertanto, non sono in grado di implementare il ruolo del fornitore nella mia applicazione per gestire i ruoli utente.

Dopo aver affrontato questo problema ho rimosso i riferimenti Owin e creato UserManager utilizzando Microsoft.AspNet.Identity 3.0.0 e EF 7, ma UserManager.AddToRoleAsync (user, roleName) genera sempre un'eccezione come di seguito: -

InvalidOperationException: l'istanza del tipo di entità "Mozaics.DAL.Models.ApplicationUser" non può essere tracciata perché un'altra traccia di questo tipo con la stessa chiave è già stata tracciata. Per le nuove entità considerare l'utilizzo di un IIdentityGenerator per generare valori chiave univoci.

Lo snippet di codice è come questo.

 public async Task<ActionResult> RoleAddToUser(string UserName, string RoleName)
    {
        var user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();

        var result = await UserManager.AddToRoleAsync(user,  RoleName );

        ViewBag.ResultMessage = "Role created successfully !";
        var list = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
        ViewBag.Roles = list;

        return View("ManageUserRoles");
    }

Risposta popolare

Corro a questo problema Una soluzione che ha funzionato per me è stata quella di ottenere l'utente tramite UserManager e quindi aggiungere il ruolo:

invece di

var user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var result = await UserManager.AddToRoleAsync(user,  RoleName );

utilizza il seguente

var user = await UserManager.FindByNameAsync(UserName);
var result = await UserManager.AddToRoleAsync(user,  RoleName );


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché