第一步,新建公共字段实体类EntityBase
public class EntityBase
{
//主键id
public Guid Id { get; set; }
//创建时间
public DateTime CreationTime { get; set; }
//最后修改时间
public DateTime LastModificationTime { get; set; }
}
第二步,新建User实体类继承EntityBase
/// <summary>
/// 用户管理实体表
/// </summary>
[Table(nameof(User))]
public class User : EntityBase
{
/// <summary>
/// 用户名
/// </summary>
[StringLength(50)]
public string? UserName { get; set; }
public string? NickName { get; set; }
}
第三步,在EF上下文类中重写SaveChanges方法
public FaceContext(DbContextOptions<FaceContext> options) : base(options)
{
}
public DbSet<User> User { get; set; }
public override int SaveChanges()
{
SetSystemField();
return base.SaveChanges();
}
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
{
SetSystemField();
return base.SaveChangesAsync();
}
/// <summary>
/// 系统字段赋值
/// </summary>
private void SetSystemField()
{
foreach (var item in ChangeTracker.Entries())
{
if (item.Entity is EntityBase)
{
var entity = (EntityBase)item.Entity;
//添加操作
if (item.State == EntityState.Added)
{
if (entity.Id == Guid.Empty)
{
entity.Id = Guid.NewGuid();
}
entity.CreationTime = DateTime.Now;
entity.LastModificationTime = DateTime.Now;
}
//修改操作
else if (item.State == EntityState.Modified)
{
entity.LastModificationTime = DateTime.Now;
}
}
}
}
再使用SaveChanges保存数据就可以不用管公共字段了。