2010-12-02 15 views
1

エンティティの挿入/更新時に、変更されたすべてのプロパティをログに記録する必要があります。 2つのテーブルの顧客と住所を取ることができます。顧客は多くのアドレスを持つことができます。エンティティの変更を挿入または更新して監査する方法はありますか?

タスク:

監査表への書き込みは、すべてのプロパティ変更されましたか?

あなたが好きであれば、それだけで更新方法を書いてください。私はあなたが以下に使用できることを見てきました

ObjectStateEntry entry = ObjectStateManager.GetObjectStateEntry(entity); 
    var changes= entry.GetModifiedProperties(). 

次は半分の試みですが、あなたが実際にメソッドを書く方法がわからない: はあなたが私にいくつかのポインタを与えるか、またはコードで私を助けることができるが、 ?

private bool UpdateCustomer(Customer modifiedCustomerDto) 
    { 
    using (var ctx = new MyContext()) 
    { 
     var oldCustomer = ctx.Customers.Where(xx => xx.CustomerId == modifiedCustomerDto.id).Single(); 
     oldCustomer.Name = modifiedCustomerDto.Name; 
     oldCustomer.Surname = modifiedCustomerDto.Surname; 

     foreach (var oldAddress in oldCustomer.Addresses) 
     { 
      //if it's a new Address add it 
      //else updateit 
      //Write to the audit table all the properties that have changed. 
     } 

     //Get Modified properties and write to the auditlog 

     ctx.SaveChanges(); 
    } 
    } 

答えて

1

SavingChanges eventを扱うthis postを見てみましょう。
このイベントで更新されるオブジェクトのすべてのプロパティを確認し、カスタムコードを使用してログに記録することができます。

+0

あなたの返信とリンクのおかげで、ありがとうございます。私はそれを一緒に接着する方法をまだ分かりません。私はcustomerDtoを持って、既存の顧客と比較し、ログテーブルに変更を書き込む必要があります。 – user9969

+0

OnPropertyChangedイベントを使用して、変更されたプロパティの一覧を作成し、OnSavingChangesイベントにログを記録します。 OnPropertyChangedの詳細:http://msdn.microsoft.com/en-us/library/cc716747.aspx – Devart

関連する問題