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

a. クラスは自動生成され、パーシャルを維持する必要があります。
b. 結合しすぎ。

  1. これを解決するために使用できる推奨フレームワーク/設計パターンはありますか?
  2. Entityframework には、この要件を処理する機能がありますか。

注意: オブジェクト (Car) とその複数値 (CarPart) オブジェクトのフィールド変更を処理するものを探しています。ありがとうございます。

4

1 に答える 1

2

SaveChanges()ほとんどの人は、監査のために Context のメソッドをオーバーライドする傾向があります。

最初に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 インターセプト(新機能)。
于 2013-07-28T10:26:03.060 に答える