// create interface IAuditableModel public interface IAuditableModel { DateTime CreationTime { get; set; } DateTime? ModifiedDate { get; set; } } // override two method in DbContext public override int SaveChanges() { DateTimeChange(); return base.SaveChanges(); } public override Task SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default(CancellationToken)) { DateTimeChange(); return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken); } private void DateTimeChange() { var added = ChangeTracker.Entries().Where(E => E.State == EntityState.Added).ToList(); added.ForEach(E => { E.Property(x => x.CreationTime).CurrentValue = DateTime.UtcNow; E.Property(x => x.CreationTime).IsModified = true; }); var modified = ChangeTracker.Entries().Where(E => E.State == EntityState.Modified).ToList(); modified.ForEach(E => { E.Property(x => x.ModifiedDate).CurrentValue = DateTime.UtcNow; E.Property(x => x.ModifiedDate).IsModified = true; E.Property(x => x.CreationTime).CurrentValue = E.Property(x => x.CreationTime).OriginalValue; E.Property(x => x.CreationTime).IsModified = false; }); }