Json.NET和NHibernate - 反序列化持久对象

时间:2010-12-29 17:22:09

标签: c# nhibernate json persistence json.net

我正在通过REST Web服务从Javascript发送JSON集合,使用Json.NET进行反序列化,最后使用NHibernate在数据库中更新(我正在使用Fluent)。我用于Json.NET反序列化的设置是:

        JsonConvert.DeserializeObject<T>(jsonString,
        new JsonSerializerSettings { 
            PreserveReferencesHandling = PreserveReferencesHandling.Objects
        });

我的Json对象是:

{
  "ID": 1,
  "Name": "ObjectName",
  "Keys": [
    {
      "ID": 6,
      "Name": "ID"
    }
  ]
}

修改对象的属性,甚至添加和修改子对象(Keys),然后反序列化效果很好。但是,我似乎无法解决如何管理子对象删除。例如,如果我删除子对象(使用Object.Keys.splice),然后更新,它所涉及的DB记录将保持持久,即使更新的父对象不包含它们。

此外,我还在映射文件中设置了“AllDeleteOrphan”。

    // one-to-many
    HasMany(x => x.Keys)
      .Inverse()
      .Cascade.AllDeleteOrphan();

有没有办法确保在反序列化和更新对象时,通过javascript删除的子对象会被级联删除?

我还读过,在使用NHibernate时,需要在更新之前通过Keys.Remove(item)从父集合中手动删除子对象。仅反序列化和更新将更加可取(更不用说可扩展)。有机会吗?

1 个答案:

答案 0 :(得分:2)

您应该能够更新,然后看到这些更改级联,但我认为该问题与标记为反向的集合有关。

Inverse = true(这是流利的nhibernate的.Inverse()是绑定)就像是说“我不管理这种关系”。由于此绑定,父对象不会删除/更新集合,因为子节点管理关系。

这是否有意义,如果不对您的域名有更全面的了解,我真的无法说出来。