C# EF-另一个字段正在更新时自动更新(上次更新日期)

C# EF-另一个字段正在更新时自动更新(上次更新日期),c#,entity-framework,entity-framework-4,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; } 每当有人更新任何字段时,我都希望

假设我有以下对象

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;
}  
a。这些类是自动生成的,我必须维护一个部分属性。
B太耦合了

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

    大多数人倾向于覆盖上下文的
    SaveChanges()
    审核方法

    首先创建一个
    IAuditable
    界面,并将其应用于所有要审核的实体:

    public interface IAuditable
    {
        public DateTime? LastUpdateDate { get; set; }
    }
    
    然后在您的
    上下文中

    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();
    }
    
    另外,看看

  • (新功能)

  • 这里没有给出答案。。但是在你的c#上保留日期会给出服务器日期。。在Db端使用GetDate()来保持多个服务器的一致性不是更好吗?我认为这是一个非常好的注释。顺便说一句:这不应该是一个表触发器吗?是的,这将是最合适的我觉得。。。只是,除非我们需要服务器端的日期,否则我们总是希望在数据库端而不是服务器端有任何日期,但这些日期将是xml格式的,因此实际上并不表示任何列。谢谢,我知道这个线程已经有将近1年的历史了,但是我建议在存储这些东西时使用UTC日期…所以哪台服务器提供日期并不重要。另外,如果使用SQL Server的日期函数,则会有一个GetUtcDate()等效项。请更正我的错误。。但这不是明确地设定了日期吗。。价格有变化吗design@RameezAhmedSayad,是的,它确实明确地设置了日期。根据您上面的评论,依赖DB
    GetDate()
    确实更好,但这取决于每个项目的需求。