搜索高和低的答案,但无法使用我尝试过的所有示例。
我有一定的双向亲子关系。
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(导致违规,但是我不管怎么说,不要在数据库中悬空孩子。)
以前有人见过这个问题吗?有关该问题的潜在解决方法的任何想法?
非常感谢任何帮助 - 到目前为止一直没有运气这一段时间......