代码之家  ›  专栏  ›  技术社区  ›  Seth Petry-Johnson

使用nhibernate将数据库中的JSON编码字符串映射到我的对象上的Dictionary属性

  •  2
  • Seth Petry-Johnson  · 技术社区  · 15 年前

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

    使用Fluent NHibernate绘制这门课的最佳方法是什么?

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

    我应该把房子映射到私人的吗 string 字段,然后在我的对象本身中对JSON进行序列化或从JSON进行序列化?

    pro:nh只需要知道如何将一个字符串映射到一个看起来足够简单的文本列。

    反对者:我的模型必须跟踪字典 一个字符串,只是为了支持持久性。

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

    我以前没用过NH拦截器,但我知道 属于 他们。我可以使用拦截器进行dictionary/json序列化吗,这样我的模型就只需要知道dictionary了?

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

    除了JSON之外,还有其他的编码策略NH本机支持,我可以用它来序列化我的字典吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Lachlan Roche    15 年前

    要将词典存储为单个编码列,请使用 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>()
        );