Saltar al contenido

Actualización de datos de usuario – ASP.NET Identity

Mantén la atención ya que en este escrito vas a hallar la contestación que buscas.Este escrito fue probado por nuestros especialistas para asegurar la calidad y exactitud de nuestro post.

Solución:

OK… Pasé horas tratando de averiguar por qué userManager.updateAsync no persistirían los datos de usuario que editamos… hasta que llegué a la siguiente conclusión:

La confusión surge del hecho de que creamos el UserManager en una línea como esta:

var manager = new UserManager(new UserStore(new MyDbContext()));

…entonces usamos manager.UpdateAsync( user ); pero eso actualizará al usuario en el contexto, y luego tendremos que guardar los cambios en el dbcontext de la Identidad. Entonces, la pregunta es cómo obtener Identity DBcontext de la manera más fácil.

Para solucionar esto, no debemos crear el UserManager en una línea… y así es como lo hago:

var store = new UserStore(new MyDbContext());
var manager = new UserManager(store);

luego, después de actualizar el usuario llamando

manager.UpdateAsync(user);

entonces vas al contexto

var ctx = store.context;

después

ctx.saveChanges();

wahooooooo… persistió 🙂

Espero que esto ayude a alguien que se tiró del pelo durante unas horas 😛

Si deja alguno de los campos para ApplicationUser O IdentityUser null la actualización volverá como exitosa pero no guardará los datos en la base de datos.

Solución de ejemplo:

ApplicationUser model = UserManager.FindById(User.Identity.GetUserId())

Agregue los campos recién actualizados:

model.Email = AppUserViewModel.Email;
model.FName = AppUserViewModel.FName;
model.LName = AppUserViewModel.LName;
model.DOB = AppUserViewModel.DOB;
model.Gender = AppUserViewModel.Gender;

Llamar a UpdateAsync

IdentityResult result = await UserManager.UpdateAsync(model);

He probado esto y funciona.

El contexto OWIN le permite obtener el contexto db. Parece estar funcionando bien hasta ahora, y después de todo, obtuve la idea de la clase ApplciationUserManager que hace lo mismo.

    internal void UpdateEmail(HttpContext context, string userName, string email)
    
        var manager = context.GetOwinContext().GetUserManager();
        var user = manager.FindByName(userName);
        user.Email = email;
        user.EmailConfirmed = false;
        manager.Update(user);
        context.GetOwinContext().Get().SaveChanges();
    

Recuerda algo, que tienes permiso de añadir una estimación verdadera si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *