覆写SaveChanges() 即可
public override int SaveChanges() { var ee = ChangeTracker.Entries().ToList(); foreach (var entry in ee) { try { if (entry.State == EntityState.Added) { Entry(entry.Entity).Property("CreateTime").CurrentValue = DateTime.Now; } if (entry.State == EntityState.Modified) { Entry(entry.Entity).Property("UpdateTime").CurrentValue = DateTime.Now; } } catch (Exception e ) { throw e; } } return base.SaveChanges(); }
这里还可能需要写入 Creator updater, 下面代码,可以获取操作的用户。
public class AspNetCorePrincipalAccessor : DefaultPrincipalAccessor
{
public override ClaimsPrincipal Principal => _httpContextAccessor.HttpContext?.User ?? base.Principal;
private readonly IHttpContextAccessor _httpContextAccessor;
public AspNetCorePrincipalAccessor(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
}
public class DefaultPrincipalAccessor : IPrincipalAccessor, ISingletonDependency
{
public virtual ClaimsPrincipal Principal => Thread.CurrentPrincipal as ClaimsPrincipal;
public static DefaultPrincipalAccessor Instance => new DefaultPrincipalAccessor();
}
public class HttpContextPrincipalAccessor : DefaultPrincipalAccessor
{
public override ClaimsPrincipal Principal => HttpContext.Current?.User as ClaimsPrincipal ?? base.Principal;
}
Configuration.ReplaceService<IPrincipalAccessor, HttpContextPrincipalAccessor>(DependencyLifeStyle.Transient);