using Manager.Data.Entities; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Diagnostics; namespace Manager.Data.Contexts; public class DateInterceptor : SaveChangesInterceptor { public override InterceptionResult SavingChanges(DbContextEventData eventData, InterceptionResult result) { UpdateEntryDates(eventData.Context); return base.SavingChanges(eventData, result); } public override ValueTask> SavingChangesAsync(DbContextEventData eventData, InterceptionResult result, CancellationToken cancellationToken = new()) { UpdateEntryDates(eventData.Context); return base.SavingChangesAsync(eventData, result, cancellationToken); } private void UpdateEntryDates(DbContext? context) { if (context == null) return; var entries = context.ChangeTracker.Entries().Where(x => x is { Entity: DateTimeBase, State: EntityState.Added or EntityState.Modified }); foreach (var entity in entries) { ((DateTimeBase)entity.Entity).LastModifiedUtc = DateTime.UtcNow; if (entity.State == EntityState.Added) { ((DateTimeBase)entity.Entity).CreatedAtUtc = DateTime.UtcNow; } } } }