繁体   English   中英

使用实体框架更新DBContext类中的创建日期和修改日期字段

[英]Update Created and Modified Date fields in DBContext class with Entity framework

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

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

重写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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM