ASP.NET 5 MVC 6 y Entity Framework 7 problemas

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

Pregunta

No podemos agregar Owin y Entity framework 7 juntos. Al hacerlo, habrá ambigüedad entre Microsoft.AspNet.Identity.core 2.0.0.0 y Microsoft.AspNet.Identity 3.0.0 Beta1

Y, por lo tanto, no puedo implementar el proveedor de roles en mi aplicación para administrar los roles de usuario.

Después de enfrentar este problema, eliminé las referencias de Owin y creé UserManager usando Microsoft.AspNet.Identity 3.0.0 y EF 7, pero UserManager.AddToRoleAsync (usuario, roleName) siempre lanza la excepción de la siguiente manera:

InvalidOperationException: la instancia del tipo de entidad 'Mozaics.DAL.Models.ApplicationUser' no se puede rastrear porque ya se está rastreando otra instancia de este tipo con la misma clave. Para las nuevas entidades, considere usar un IIdentityGenerator para generar valores clave únicos.

El fragmento de código es así.

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

Respuesta popular

Corro a este tema. Una solución que funcionó para mí fue obtener el usuario a través del UserManager y luego agregar el rol:

en lugar de

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

usa lo siguiente

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



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué