1

假设我有以下对象

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 是否具有处理此要求的功能。

注意:我正在寻找可以处理对象(Car)及其多值(CarPart)对象中的字段更改的东西谢谢。

4

1 回答 1

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. 审计数据库上下文
  2. Entity Framework 6 拦截(新功能)。
于 2013-07-28T10:26:03.060 回答