// 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<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default(CancellationToken))
{
DateTimeChange();
return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
}
private void DateTimeChange()
{
var added = ChangeTracker.Entries<IAuditableModel>().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<IAuditableModel>().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;
});
}
Comments