Tengo una clase ApplicationUser
que hereda de IdentityUser
. LastLoggedIn
la propiedad LastLoggedIn
que es el tipo de datos OffsetDateTime
y la OffsetDateTime
con cada solicitud a la API. Además, estoy usando Audit
from entityframework plus para registrar las operaciones de agregar / actualizar / eliminar de los usuarios y así es como me topé con este problema. cada vez que actualizo la propiedad LastLoggedIn
la entidad ApplicationUser
puedo ver que la propiedad Id
se ha modificado, mostrando el mismo valor antiguo y nuevo. ¿Por qué mi clave principal está siendo modificada aquí?
Estoy publicando el código correspondiente,
public class ApplicationUser : IdentityUser {
[Required, StringLength(50)]
[Display (Name = "First Name")]
public string FirstName { get; set; }
public OffsetDateTime? LastLoggedIn { get; set; }
}
Método que llama a la entidad, ya que la clase se hereda de IdentityUser
, estoy usando UserManager
public async Task UpdateUserLastActivityDateAsync (string userId, string timeZone) {
var user = await userManager.FindByIdAsync(userId);
user.LastLoggedIn = timeZone.GetInstantOffsetDateTime();
await unitOfWork.CompleteAsync(); // = context.SaveChangesAsync();
}
Intenté lo siguiente pero obtengo una excepción,
builder.Entity<ApplicationUser>()
.Property(e => e.Id)
.ValueGeneratedOnAddOrUpdate()
.Metadata.BeforeSaveBehavior = PropertySaveBehavior.Ignore;
La propiedad 'Id' no se puede configurar como 'ValueGeneratedOnUpdate' o 'ValueGeneratedOnAddOrUpdate' porque el valor de la clave no se puede cambiar después de que la entidad se haya agregado al almacén.
La propiedad clave no puede ser ignorada por el diseño.
Se debe poder recuperar qué fila está detrás del cambio. Sin la clave, no puede saber qué ApplicationUser ha sido modificado.