2017-10-04 18 views
0

私はこのようなクラスに何か持っている:取得プロパティ値

public class foo{ 

     public string FooProp1 {get; set;} 

     public Bar Bar{get; set;} 

    } 

public class Bar{ 

     public string BarProp1 {get; set;} 

     public string BarProp2 {get; set;} 

    } 

は、私がもし私の更新はFooが、私はすべてのためにそのプロパティ名と値を取得することができ、いくつかの監査を設定しているがプロパティは、 'バー'から離れて。 'BarProp1'のプロパティ名と値を取得する方法はありますか?

Fooが変更されたときにBarProp1を監査したいと思います。

+0

'BarProp1'が変更された場合、' Bar'も 'Modified'であるため、既に報告されます。 –

+0

バーが変更されていません。 fooプロパティのみが変更されていますが、他の目的でAudit Barのプロパティ値にしたいので、barプロパティの値を取得します。 –

+0

次に、監査のための追加情報を含む(マッピングされていない)計算されたプロパティを規定するインタフェースを定義します。 –

答えて

0

あなたの監査システムに追加の情報を報告するようにします。私はあなたのCreateAuditメソッドでそれを行うのに最適な場所だと思います。問題はどういうことか。

var foo = entry.Entity as Foo; 
if (foo != null) 
{ 
    // do something with foo.Bar 
} 

var boo = entry.Entity as Boo; 
if (boo != null) 
{ 
    // do something with boo.Far 
} 

など

もちろん非常にきれいではありません。

あなたentryを着信それぞれに特別な何かをそこにコードを持つことができます。

私はインターフェイスを定義し、これらのクラスのそれぞれにそれをタックなり、監査人に追加情報を報告する必要が複数のクラスがある場合:CreateAudit

public interface IAuditable 
{ 
    string AuditInfo { get; } 
} 

public class Foo : IAuditable 
{ 
    public string FooProp1 { get; set; } 
    public Bar Bar { get; set; } 

    [NotMapped] 
    public string AuditInfo 
    { 
     get { return Bar?.BarProp1; } 
    } 
} 

そして:

var auditable = entry.Entity as IAuditable; 
if (auditable != null) 
{ 
    // do something with auditable.AuditInfo 
} 

そして、この動作が必要なクラスが1つだけあっても、あなたのコードを自明にするので、私はまだそのインターフェイスを使用します。

関連する問題