最近做的一个新项目,从零搭建了一个.net core网站,数据库中有两个字段,创建时间和修改时间,旧有项目是手动去更新,即每次更新到数据库前调用赋值的方法,很繁琐,所以在此进行了简化,让程序员只专注于业务逻辑,实现如下:
这个是Entity实体的基类,加入了数据ID、创建时间、修改时间,每个实体都要继承这个基类
public class EntityBase
{
[Column("id")]
public Guid Id { get; set; }
[Column("createtime")]
public DateTime CreateTime{get; set;}
[Column("modifiedtime")]
public DateTime ModifiedTime{ get; set; }
}
这个是重写了DbContext的SaveChangesAsync()方法,在写入数据库前对新增、修改的数据进行赋值
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.CreateTime = DateTime.Now;
entity.ModifiedTime = DateTime.Now;
}
//修改操作
else if (item.State == EntityState.Modified)
{
entity.ModifiedTime = DateTime.Now;
}
}
}
}