我正在通过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)
从父集合中手动删除子对象。仅反序列化和更新将更加可取(更不用说可扩展)。有机会吗?
答案 0 :(得分:2)
您应该能够更新,然后看到这些更改级联,但我认为该问题与标记为反向的集合有关。
Inverse = true(这是流利的nhibernate的.Inverse()是绑定)就像是说“我不管理这种关系”。由于此绑定,父对象不会删除/更新集合,因为子节点管理关系。
这是否有意义,如果不对您的域名有更全面的了解,我真的无法说出来。