使用Entity框架更新DBContext类中的Created和Modified Date字段

时间:2017-04-15 17:09:29

标签: c# entity-framework

有没有办法可以在保存实体时将DateCreated和UpdateDate字段设置为某个日期来更新或插入实体。

我有一个数据提供程序帮助程序类,它封装了所有数据对象的更新,添加和删除功能。但是,当保存对象时,DateCreated和UpdateDate字段为空,并且我没有为它们分配当前日期。我希望能够保存我指定的日期对象。我想避免在执行保存操作的地方更改代码。是否可以在DBContext类中执行此操作?

1 个答案:

答案 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;
    }
}