tables - Asp.net Identity 2.0 actualización de usuario
asp.net membership vs identity (2)
El problema que tuve fue crear un ApplicationUser y guardar el objeto en la base de datos. Dado que Identity utiliza Entity Framework bajo las cubiertas, se agrega el estado de entidad del objeto "updatedUser". Así que Entity Framework intentó insertar en la base de datos de Identidad, lo que provocó el conflicto. Por lo tanto, debe obtener el usuario y actualizar el objeto de usuario devuelto para que Entity Framework sepa que el estado de la entidad está Modificado. Aquí está el código de trabajo:
var user = await UserManager.FindByIdAsync(model.UserId);
user.Email = model.EmailAddress;
user.CustomerId = model.CustomerId;
user.FirstName = model.FirstName;
user.PhoneNumber = model.PhoneNumber;
user.LastName = model.LastName;
var result = await UserManager.UpdateAsync(user);
Tener un problema con guardar los cambios de usuario en la base de datos, como cambiar el nombre de la persona. Estoy usando el modelo IdentityModel que se crea automáticamente en un nuevo proyecto web VS2013 usando autenticación individual. Lamentablemente, la plantilla no le permite cambiar ninguna información del usuario, aparte de cambiar los roles. Estoy buscando a través de google, no he encontrado mucho. ¿Alguien implementó la actualización utilizando el código de identidad base?
Esto es lo más cercano que encontré:
Actualización de datos de usuario - Asp.net Identity
No he tenido éxito en la incorporación de la plantilla por defecto. Acabo de empezar a usar Identity esta semana, por lo que podría ser mi falta de comprensión el problema.
var updatedUser = new ApplicationUser
{
Id = model.UserId,
UserName = model.UserName,
CustomerId = model.CustomerId,
Email = model.EmailAddress,
FirstName = model.FirstName,
LastName = model.LastName,
PhoneNumber = model.PhoneNumber,
};
...
var result = await UserManager.UpdateAsync(updatedUser);
Mi UserManager se crea así:
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
Me sale el siguiente error en el navegador:
No se pudo adjuntar una entidad de tipo ''ApplicationUser'' porque otra entidad del mismo tipo ya tiene el mismo valor de clave principal. Esto puede suceder cuando se usa el método ''Adjuntar'' o se establece el estado de una entidad en ''Sin cambios'' o ''Modificado'' si alguna de las entidades en el gráfico tiene valores de clave en conflicto. Esto puede deberse a que algunas entidades son nuevas y aún no han recibido valores de clave generados en la base de datos. En este caso, use el método ''Agregar'' o el estado ''Agregado'' para rastrear el gráfico y luego configure el estado de las entidades no nuevas en ''Sin cambios'' o ''Modificado'' según corresponda
Gracias
También puede usar AuthContext y actualizar el estado a EntityState.Modified. A continuación se muestra un ejemplo. Esto le permitirá hacer solo una llamada a la base de datos en lugar de dos.
AuthContext authContext = new AuthContext(); authContext.Entry(updatedUser).State = EntityState.Modified;