NHIbernate父子问题:外键设置为null而不是删除

时间:2013-07-02 20:25:43

标签: foreign-keys parent-child cascading-deletes

搜索高和低的答案,但无法使用我尝试过的所有示例。

我有一定的双向亲子关系。

Parent(“Case”)拥有一个子集合(“CaseNotes”)并映射如下:

HasMany<CaseNote>(c => c.Notes).KeyColumn("casesid").Inverse().Cascade.AllDeleteOrphan()

儿童参考父母:

References<Case>(c => c.ParentCase,"casesid").Cascade.All();

在“添加”上,该项目已添加到集合中,但在显式保存(调用session.Flush()之前)不会持久保存到数据库中

在删除时,将执行以下步骤:

Case.Notes.Remove(item.CaseNote); //removes from the Notes collection in parent
item.CaseNote.ParentCase = null; //sets child reference to the parent to null

预期的行为是AllDeleteOrphan()将通过delete语句巧妙地删除空集子节点。一切正常,除了一个尴尬的场景 - 当顺序调用Add和Delete而没有持久化项目时 - 看起来AllDeleteOrphan()没有触发,并且子外键id被简单地设置为null(导致违规,但是我不管怎么说,不要在数据库中悬空孩子。)

以前有人见过这个问题吗?有关该问题的潜在解决方法的任何想法?

非常感谢任何帮助 - 到目前为止一直没有运气这一段时间......

0 个答案:

没有答案