Как настроить генерацию значения поля при изменении записи для code first в ef core?

При генерации ДБ в режиме code first можно задать правило присвоения значения по умолчанию для поля при добавлении новой записи в таблицу. Например (для PSQL):
modelBuilder.Entity<Product>()
	.Property(x => x.DateCreate)
	.HasDefaultValueSql("LOCALTIMESTAMP");


Есть ли возможность для code first установить значение поля при обновлении записи (триггер или как-то по другому)? Например, надо автоматически устанавливать поле с датой последнего обновления (DateUpdate).
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
yarosroman
@yarosroman
C# the best
Самое простое дописать в миграцию в Up метод, migrationBuilder.Sql(......) - создание триггера в базе. ну и в Down его удалить. Соответственно, если удаляем миграцию или переделываем, каждый раз добавляем.

ну или
https://learn.microsoft.com/ru-ru/ef/core/managing...

ну или вот либа
https://github.com/win7user10/Laraue.EfCoreTriggers
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@OwDafuq
Переопределить SaveChanges?
Можете пометить свои сущности, у которых будет одинаковое поле "DateUpdate" интерфейсом и внутри переопределенного SaveChanges(Async) делать так:
foreach (var item in ChangeTracker.Entries<IAuditableEntity>().Where(x => x.State == EntityState.Modified))
{
    item.DateUpdate = DateTime.Now;
}


Таким образом просто помечая сущности интерфейсом вы сразу накладываете на них эту логику (не забудьте потом сделать миграцию, чтобы поле в базе появилось).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы