в 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>();
});
, но то, что происходит при добавлении и обновлении обоих свойств, всегда устанавливается на новые значения. Это означает, что для новых вкладок устанавливается модифицированное значение, а для обновлений - дата создания. Что удаляет истину, созданную на дату.
Вопрос в том, правильно ли настроены генераторы значений? Есть ли способ сделать это с помощью генераторов? В генераторах я пытался также проверить состояние, возвращаемое значение, только если состояние было добавлено или изменено. Но состояние всегда равнялось Обособленно.
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; }
}