メタデータが添付されたクラスがあります。例えば: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
を使用して検討していたが、GetMetadata
はBar
の別の特性に依存していると私はすべての必要な場所でその値を取得する方法がわかりません。
簡潔に:NHibernate/FluentNHibernateに[OnDeserialized]
と似たものがありますか?
ドキュメントは次のとおりです。http://nhibernate.info/doc/nhibernate-reference/events.html –