3

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

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

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 (导致违反约束,但我无论如何都不想在数据库中晃来晃去的孩子)。

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

非常感谢任何帮助 - 解决这个问题已经有一段时间了,到目前为止还没有运气......

4

0 回答 0