有没有办法可以在保存实体时将DateCreated和UpdateDate字段设置为某个日期来更新或插入实体。
我有一个数据提供程序帮助程序类,它封装了所有数据对象的更新,添加和删除功能。但是,当保存对象时,DateCreated和UpdateDate字段为空,并且我没有为它们分配当前日期。我希望能够保存我指定的日期对象。我想避免在执行保存操作的地方更改代码。是否可以在DBContext类中执行此操作?
答案 0 :(得分:2)
覆盖DbContext.SaveChanges
以实现此横切功能。如果您只需要为某些实体类型分配属性,那么可以使用接口或类属性来区分它们而不是慢速反射检查:
public partial class PostalDbContext
{
public override int SaveChanges()
{
DateTime time = DateTime.Now;
var entries = ChangeTracker.Entries()
.Where(entry => entry.Entity is ITrackableEntity)
.ToList();
ITrackableEntity x;
foreach (var entry in entries.Where(e => e.State == EntityState.Added))
{
entry.SetPropertyValue(nameof(x.DateCreated), time);
}
foreach (var entry in entries.Where(e => e.State == EntityState.Modified))
{
entry.SetPropertyValue(nameof(x.DateModified), time);
}
return base.SaveChanges();
}
}
public static class DbEntityEntryEx
{
public static void SetPropertyValue<T>(this DbEntityEntry entry, string propertyName, T time)
{
entry.Property(propertyName).CurrentValue = time;
}
}