2016-08-02 26 views
0

我有一个有一些元数据附加到它的类。例如: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]的东西?

回答

相关问题