我有一个有一些元数据附加到它的类。例如:NHibernate - 检索数据库条目后执行步骤
public class Parameter<T> : IParameter
{
public string Id { get; set; }
public T Value { get; set; }
public List<IParameter> Metadata { get; set; }
}
我有另一类则包含IList<IParameter>
public class Bar
{
public IList<IParameter> Parameters { get; set; }
}
我有一个IUserType
可以存储某些类型的如JSON(诸如List<IParameter>
)。我打算存储使用这个Bar.Parameters
,所以列值将如下所示:
[
{
"id": "letter",
"value": "a",
"metadata": [
"options": [ "a", "b", "c" ]
]
},
{
"id": "cat.name",
"value": "Mittens",
"metadata": [
"display_name": "Name"
]
}
]
然而,它是用不着我来存储元数据,因为它是在其他地方定义,可以使用Parameter.Id
检索。我想,而不是存储映射对它们的值id的数组:
[
"letter": "a",
"cat.name": "Mittens"
]
我知道如何使Parameters
列以这种方式写的,但我不确定我怎么能去制作Bar
检索元数据一旦被检索到。
什么是理想的是类似于WCF中的OnDeserialized
属性。这让我定义上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);
}
}
}
我想避免手动调用Bar
一个函数来检索元数据我真正Bar
是一个大的类层次结构的一部分。当我检索拥有的类时,NHibernate自动检索Bar
作为连接的一部分。
Bar
可以执行“反序列化”步骤也很重要,因为其他类使用Parameter<T>
类,并且可能会将元数据从不同的位置填充到Bar
。
我用它加载在NullSafeGet
元数据的IUserType
考虑,但GetMetadata
取决于Bar
他人财产的,我不知道如何获得在所有必要的地方该值。
总之:在NHibernate/FluentNHibernate中是否有类似于[OnDeserialized]
的东西?
而文档在这里:http://nhibernate.info/doc/nhibernate-reference/events.html –