Ho una classe ApplicationUser
che eredita da IdentityUser
. Ho aggiunto la proprietà LastLoggedIn
che è datatype OffsetDateTime
e la OffsetDateTime
ad ogni richiesta all'API. Inoltre, sto usando Audit
da entityframework plus per registrare le operazioni di aggiunta / aggiornamento / cancellazione degli utenti e questo è il modo in cui mi sono imbattuto in questo problema. ogni volta che LastLoggedIn
proprietà LastLoggedIn
dell'entità ApplicationUser
posso vedere che anche la proprietà Id
è stata modificata, mostrando lo stesso valore vecchio e nuovo. Perché la mia chiave primaria è stata modificata qui?
Inserisco il codice pertinente,
public class ApplicationUser : IdentityUser {
[Required, StringLength(50)]
[Display (Name = "First Name")]
public string FirstName { get; set; }
public OffsetDateTime? LastLoggedIn { get; set; }
}
Metodo che chiama l'entità, dal momento che la classe eredita da IdentityUser
, sto 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();
}
Ho provato quanto segue ma ottengo un'eccezione
builder.Entity<ApplicationUser>()
.Property(e => e.Id)
.ValueGeneratedOnAddOrUpdate()
.Metadata.BeforeSaveBehavior = PropertySaveBehavior.Ignore;
L''Id' della proprietà non può essere configurato come 'ValueGeneratedOnUpdate' o 'ValueGeneratedOnAddOrUpdate' perché il valore della chiave non può essere modificato dopo che l'entità è stata aggiunta all'archivio.
La proprietà chiave non può essere ignorata dal design.
Questo dovrebbe essere in grado di recuperare quale riga è dietro la modifica. Senza la chiave, non puoi sapere quale ApplicationUser è stato modificato.