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

nHibernate更改跟踪不会获取对自定义类型(iuserType)的更改

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

    我有一个模特 Dictionary<string, string> 使用JSON存储在数据库中的属性。我使用一个自定义的nhibernate类型将字典映射到JSON编码的字符串和从中映射出来,这很好。

    我的问题是当我刷新会话时, 只有 已更改的属性是此字典,则不会更新实体。如果任何其他属性也发生了更改,则更新实体(包括JSON字符串)。

    换句话说,nhibernate使用我的自定义类型将字典正确映射到json,但是这个自定义属性不用于确定实体是否发生了更改。

    建议?

    1 回复  |  直到 15 年前
        1
  •  4
  •   Jamie Ide    15 年前

    您需要正确覆盖 Equals 在您的iuserType实现中,以便在与初始值比较时返回false。NHiBiNATE使用 等于 以确定字段是否有需要持久化的更改。

    当另一个属性发生更改时更新它的原因是,默认情况下,nhibernate会发布更新,包括所有映射的属性。