Почему мой первичный ключ сущности показывает, что должен быть изменен после обновления сущности?

У меня есть класс 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 был изменен.

Другие вопросы по тегам