【发布时间】: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