EF - 当另一个字段更新时自动更新字段(上次更新日期)

时间:2013-07-28 10:15:33

标签: c# entity-framework entity-framework-4

假设我有以下对象

public class Car{
     public int id;
     public string name;
     public string color;
     publid DateTime LastUpdateDate;
}

public class CarPart{
     public int id;
     public string name;
     public string color;
}

每当有人更新任何字段时,我都希望更新LastUpdateDate字段 我最糟糕的设计是写下面的内容

public void setName(string name){
    this.name=name;
    this.LastUpdateDate = DateTime.now;
}  

一个。这些类是自动生成的,我必须保持部分 湾太耦合了。

  1. 我可以使用推荐的框架/设计模式来解决这个问题吗?
  2. Entityframework是否具有处理此要求的功能。
  3. 注意:我正在寻找能够处理对象(Car)及其多值(CarPart)对象中的字段更改的内容 感谢。

1 个答案:

答案 0 :(得分:2)

大多数人倾向于覆盖Context的SaveChanges()审核方法。

首先创建一个IAuditable接口并将其应用于您要审核的所有实体:

public interface IAuditable
{
    public DateTime? LastUpdateDate { get; set; }
}

然后在Context

public override int SaveChanges()
{
      var entries = ChangeTracker.Entries()
                                 .Where(e => e.State == EntityState.Modified);

      foreach (var entry in entries)
      {
            var auditableEntity = entry.Entity as IAuditable;

            if (auditableEntity  != null)
                auditableEntity.LastUpdateDate = DateTime.UtcNow;
      }

      return base.SaveChanges();
}

另外,看看

  1. AuditDbContext
  2. Entity Framework 6 Interception(新功能)。