私は、 IdentityUser
から継承するクラスApplicationUser
を持っています。私は、プロパティを追加LastLoggedIn
あるOffsetDateTime
データ型と私はAPIへのすべてのリクエストでそれを修正します。また、私はentityframework plusのAudit
を使用してユーザーの追加/更新/削除操作をログに記録しています。 ApplicationUser
エンティティのLastLoggedIn
プロパティを更新するたびに、同じ古い値と新しい値を示すId
プロパティも変更されていることがわかります。私の主キーがここで変更されているのはなぜですか?
私は関連コードを掲示し、
public class ApplicationUser : IdentityUser {
[Required, StringLength(50)]
[Display (Name = "First Name")]
public string FirstName { get; set; }
public OffsetDateTime? LastLoggedIn { get; set; }
}
クラスがIdentityUser
から継承するので、エンティティを呼び出すメソッド、私はUserManager
を使用しています
public async Task UpdateUserLastActivityDateAsync (string userId, string timeZone) {
var user = await userManager.FindByIdAsync(userId);
user.LastLoggedIn = timeZone.GetInstantOffsetDateTime();
await unitOfWork.CompleteAsync(); // = context.SaveChangesAsync();
}
私は以下を試しましたが、例外があります。
builder.Entity<ApplicationUser>()
.Property(e => e.Id)
.ValueGeneratedOnAddOrUpdate()
.Metadata.BeforeSaveBehavior = PropertySaveBehavior.Ignore;
エンティティがストアに追加された後でキー値を変更できないため、プロパティ 'Id'は 'ValueGeneratedOnUpdate'または 'ValueGeneratedOnAddOrUpdate'として設定できません。
キープロパティは設計上無視できません。
これは、変更の後ろにある行を取り出すことができるためです。キーがなければ、どのApplicationUserが変更されたかを知ることはできません。