Problèmes ASP.NET 5 MVC 6 et Entity Framework 7

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

Question

Nous ne pouvons pas ajouter Owin et Entity Framework 7 ensemble. Dans ce cas, il y aura une ambiguïté entre Microsoft.AspNet.Identity.core 2.0.0.0 et Microsoft.AspNet.Identity 3.0.0 Beta1.

Et par conséquent, je ne suis pas en mesure d'implémenter le fournisseur de rôle dans mon application pour gérer les rôles d'utilisateur.

Après avoir fait face à ce problème, j'ai supprimé les références Owin et créé UserManager à l'aide de Microsoft.AspNet.Identity 3.0.0 et EF 7, mais UserManager.AddToRoleAsync (user, roleName) lève toujours une exception comme suit:

InvalidOperationException: l'instance du type d'entité 'Mozaics.DAL.Models.ApplicationUser' ne peut pas être suivie car une autre instance de ce type avec la même clé est déjà suivie. Pour les nouvelles entités, envisagez d'utiliser IIdentityGenerator pour générer des valeurs de clé uniques.

Extrait de code est comme ça.

 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");
    }

Réponse populaire

Je cours à cette question. Une solution qui a fonctionné pour moi était d'obtenir l'utilisateur via UserManager, puis d'ajouter le rôle:

au lieu de

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

utilisez le suivant

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi