【问题标题】:Json.NET and NHibernate - Deserializing a Persistent ObjectJson.NET 和 NHibernate - 反序列化持久对象
【发布时间】:2010-12-29 17:22:09
【问题描述】:

我正在通过 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"
    }
  ]
}

修改对象的属性,甚至添加和修改子对象(键),然后反序列化效果很好。但是,我似乎无法弄清楚如何管理子对象删除。例如,如果我删除了一个子对象(使用Object.Keys.splice),然后进行更新,那么即使更新的父对象不包含它们,它所关联的数据库记录也会保持不变。

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

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

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

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

【问题讨论】:

    标签: c# nhibernate json persistence json.net


    【解决方案1】:

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

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

    这是否有意义,如果没有对您的领域有更全面的了解,我真的不能说。

    【讨论】:

    • 嘿,感谢您回复我。我尝试删除它,但仍然存在删除问题。令人困惑,因为我一直认为 Inverse 标签指定了关系的哪一方负责保存(记录),而不是关系本身?
    • 保留所有内容 - 从映射中删除 Inverse() 的效果是使数据库中的外键为空 - 有效地结束了关系......所以,它奏效了!只需要删除孤儿,我们就赢了。谢谢。
    • 嗨,你有没有想过如何让它删除记录而不是使外键为空?
    猜你喜欢
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多