搜索了高低的答案,但无法使用我尝试过的所有示例。
我有一定的双向父子关系。
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() 将通过删除语句巧妙地删除空集子项。除了一个尴尬的情况外,所有工作都很好 - 当 Add 和 Delete 被顺序调用而没有持久化项目时 - 似乎 AllDeleteOrphan() 没有触发并且子外键 id 被简单地设置为 null (导致违反约束,但我无论如何都不想在数据库中晃来晃去的孩子)。
有没有人见过这个问题?有关该问题的潜在解决方法的任何想法?
非常感谢任何帮助 - 解决这个问题已经有一段时间了,到目前为止还没有运气......