Почему мой первичный ключ сущности показывает, что должен быть изменен после обновления сущности?
У меня есть класс ApplicationUser
что наследует от IdentityUser
, Я добавил недвижимость LastLoggedIn
который OffsetDateTime
Тип данных и я изменяю его при каждом запросе к API. Также я использую Audit
из entityframework plus для регистрации пользовательских операций добавления / обновления / удаления, и вот как я столкнулся с этой проблемой. каждый раз, когда я обновляю 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", так как значение ключа нельзя изменить после добавления объекта в хранилище.
1 ответ
Свойство ключа не может быть проигнорировано дизайном.
Это связано с возможностью узнать, какая строка стоит за изменением. Без ключа вы не можете знать, какой ApplicationUser был изменен.