EF Core 3 имеет генератор стоимости - PullRequest
0 голосов
/ 29 марта 2020

в modelBUilder для объекта, я пытаюсь установить даты создания и изменения при добавлении и обновлении с помощью собственного генератора. Причина перехода по этому пути заключается в том, что DbContext, который создает модели, используется базовым классом. Этот базовый класс наследуется расширениями SQL Server & SQLite EFCore. Из-за этого должна быть явная функциональность базы данных в контексте. GetDateUT C () и триггеры, которые были изначально реализованы SQL Server.

modelBuilder.Entity<CommunicationSendRequest>(entity =>
            {
               ...

                entity.Property(p => p.CreatedAt).ValueGeneratedOnAdd().HasValueGenerator<CreatedAtTimeGenerator>();
                entity.Property(p => p.ModifiedAt).ValueGeneratedOnUpdate().HasValueGenerator<ModifiedAtTimeGenerator>();

            });

, но то, что происходит при добавлении и обновлении обоих свойств, всегда устанавливается на новые значения. Это означает, что для новых вкладок устанавливается модифицированное значение, а для обновлений - дата создания. Что удаляет истину, созданную на дату.

CreatedAt and Modifiedat dates

Вопрос в том, правильно ли настроены генераторы значений? Есть ли способ сделать это с помощью генераторов? В генераторах я пытался также проверить состояние, возвращаемое значение, только если состояние было добавлено или изменено. Но состояние всегда равнялось Обособленно.

 public class CreatedAtTimeGenerator : ValueGenerator<DateTimeOffset>
    {
        public override DateTimeOffset Next(EntityEntry entry)
        {
            if (entry == null)
            {
                throw new ArgumentNullException(nameof(entry));
            }

            return DateTimeOffset.UtcNow;
        }

        public override bool GeneratesTemporaryValues { get; }
    }
    public class ModifiedAtTimeGenerator : ValueGenerator<DateTimeOffset>
    {
        public override DateTimeOffset Next(EntityEntry entry)
        {
            if (entry == null)
            {
                throw new ArgumentNullException(nameof(entry));
            }

            return DateTimeOffset.UtcNow;
        }

        public override bool GeneratesTemporaryValues { get; }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...