使用NHibernate将DB中的JSON编码字符串映射到我的对象上的Dictionary属性

时间:2010-03-01 16:21:42

标签: nhibernate fluent-nhibernate

我有一个维护各种属性的属性包的对象。这通过我的对象模型作为Dictionary<string, string>公开,并作为JSON编码的字符串存储在数据库中。

使用Fluent NHibernate映射此类的最佳方法是什么?

选项1:映射到私有字段,在我的对象中进行JSON转换?

我应该将属性映射到私有string字段,然后在对象本身中对JSON进行序列化吗?

Pro:NH只需知道将单个字符串映射到文本列,这似乎很容易。

Con:我的模型必须跟踪字典字符串,只是为了支持持久性。

选项2:使用某种拦截器?

之前我没有对NH拦截器做过任何事情,但我知道 它们。我可以使用拦截器来执行Dictionary / JSON序列化,这样我的模型只需要知道字典吗?

选项3:使用不同的编码策略?

除了JSON之外,是否存在NH本地支持的编码策略,我可以使用它来序列化我的字典?

1 个答案:

答案 0 :(得分:2)

要将词典存储为单个编码列,请使用IUserType。您可以使用IUserType将字典映射为属性。这个blog post有一个很好的实现IUserType的例子。

Map( x => x.JsonDictionary )
    .CustomTypeIs<MyUserType>();

您还可以将其映射为值集合。这允许从字典中查询单个值。

HasMany( x => x.JsonDictionary )
    .WithTableName("entity_jsondictionary")
    .KeyColumnNames.Add("entityid")
    .Cascade.All()
    .AsMap<string>(
        index => index.WithColumn("name").WithType<string>(),
        element => element.WithColumn("value").WithType<string>()
    );