Ich habe eine Klasse ApplicationUser
, die von IdentityUser
erbt. Ich habe die Eigenschaft LastLoggedIn
das ist OffsetDateTime
Datentyp und ich es auf die API mit jeder Anforderung ändern. Außerdem verwende ich Audit
von entityframework plus, um Benutzer hinzuzufügen, zu aktualisieren / zu löschen, und auf diese Weise bin ich auf dieses Problem gestoßen. Jedes Mal, wenn ich die LastLoggedIn
Eigenschaft der ApplicationUser
Entität LastLoggedIn
kann ich sehen, dass die Id
Eigenschaft ebenfalls geändert wurde und denselben alten und neuen Wert LastLoggedIn
. Warum wird mein Primärschlüssel hier geändert?
Ich poste den relevanten Code,
public class ApplicationUser : IdentityUser {
[Required, StringLength(50)]
[Display (Name = "First Name")]
public string FirstName { get; set; }
public OffsetDateTime? LastLoggedIn { get; set; }
}
Methode, die die Entität aufruft, da die Klasse von IdentityUser
erbt, verwende ich UserManager
public async Task UpdateUserLastActivityDateAsync (string userId, string timeZone) {
var user = await userManager.FindByIdAsync(userId);
user.LastLoggedIn = timeZone.GetInstantOffsetDateTime();
await unitOfWork.CompleteAsync(); // = context.SaveChangesAsync();
}
Ich habe Folgendes versucht, aber ich bekomme eine Ausnahme,
builder.Entity<ApplicationUser>()
.Property(e => e.Id)
.ValueGeneratedOnAddOrUpdate()
.Metadata.BeforeSaveBehavior = PropertySaveBehavior.Ignore;
Die Eigenschaft 'Id' kann nicht als 'ValueGeneratedOnUpdate' oder 'ValueGeneratedOnAddOrUpdate' konfiguriert werden, da der Schlüsselwert nicht geändert werden kann, nachdem die Entität dem Geschäft hinzugefügt wurde.
Die Schlüsseleigenschaft kann nicht vom Design ignoriert werden.
Das ist in der Lage zu ermitteln, welche Zeile hinter der Änderung steht. Ohne den Schlüssel können Sie nicht wissen, welcher ApplicationUser geändert wurde.