나는 IdentityUser
로부터 상속받은 ApplicationUser
클래스를 가지고있다. LastLoggedIn
속성을 OffsetDateTime
데이터 형식으로 추가하고 API에 대한 모든 요청을 수정합니다. 또한, 엔티티 프레임 워크의 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
때문에 엔터티를 호출하는 메서드, 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가 수정되었는지 알 수 없습니다.