代码改变世界

EFCore 自动更新 CreateTime, UpdateTime

2021-01-26 15:00  qgbo  阅读(757)  评论(0编辑  收藏  举报

覆写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);