2016-08-02 4 views
0

メタデータが添付されたクラスがあります。例えば:NHibernate - データベースエントリの取得後にステップを実行します。

public class Parameter<T> : IParameter 
{ 
    public string Id { get; set; } 
    public T Value { get; set; } 
    public List<IParameter> Metadata { get; set; } 
} 

私は(List<IParameter>など)、JSONなどの特定のタイプを格納することができるIUserTypeを有する次いでIList<IParameter>

public class Bar 
{ 
    public IList<IParameter> Parameters { get; set; } 
} 

を含む別のクラスを持っています。私はこれを使用してBar.Parametersを格納する予定なので、列の値は、次のようになります。それは他の場所で定義されており、Parameter.Idを使用して取得することができますように私は、メタデータを格納することが不要であるしかし

[ 
    { 
     "id": "letter", 
     "value": "a", 
     "metadata": [ 
      "options": [ "a", "b", "c" ] 
     ] 
    }, 
    { 
     "id": "cat.name", 
     "value": "Mittens", 
     "metadata": [ 
      "display_name": "Name" 
     ] 
    } 
] 

。私の代わりに、その値に対してマッピングされたIDの配列を保存したいと思います:

[ 
    "letter": "a", 
    "cat.name": "Mittens" 
] 

私はParameters列はこのように書かれるようにする方法を知っているが、私はBarを取得することについては行くことができるかわかりませんよメタデータを取得した後

WCFのOnDeserialized属性に似た何が理想的でしょうか。これは、私はそれが非直列化された後に呼び出されBar上のメソッドを定義することができます:私は手動で私の本当のBarなどのメタデータを取得するためにBar上の関数を呼び出す避けたい

public class Bar 
{ 
    public string Type { get; set; } 
    public IList<IParameter> Parameters { get; set; } 

    [OnDeserialized] 
    private void OnDeserialized(StreamingContext ctx) 
    { 
     // Extremely simplified example of how the Foo metadata may 
     // be retrieved. 
     foreach(var parameter in Parameters) 
     { 
      parameter.Metadata = BarMetadataStore.GetMetadata(Type, parameter.Id); 
     } 
    } 
} 

を大クラス階層の一部であります。 NHibernateは、所有するクラスを取得するときに、自動的に結合の一部としてBarを取得します。

他のクラスがParameter<T>クラスを使用し、別の場所のメタデータをBarに取り込む可能性があるため、Barが「逆シリアル化」ステップを実行できることも重要です。

私はNullSafeGet内のメタデータをロードIUserTypeを使用して検討していたが、GetMetadataBarの別の特性に依存していると私はすべての必要な場所でその値を取得する方法がわかりません。

簡潔に:NHibernate/FluentNHibernateに[OnDeserialized]と似たものがありますか?

答えて

1

私はevent listeners(具体的には、IPostLoadEventListener)があなたの後になっていると思います。

+0

ドキュメントは次のとおりです。http://nhibernate.info/doc/nhibernate-reference/events.html –

関連する問題