Nhibernate - item的ParentID被更新为null,而不是被删除

本文关键字:删除 null 更新 item ParentID Nhibernate | 更新日期: 2023-09-27 18:17:23

流程内部的业务逻辑是:

    <
  • 开始事务/gh>
  • 添加一个项目到集合
  • 执行查找("somethingA")
  • 根据上一步删除该项。
  • <
  • 提交事务/gh>

我在父类中使用了级联all-delete-orphans和反向=true。当从集合中删除项目时,我设置.parentObj = null并从集合中删除该项目。

当使用TemplateFlushMode.Auto时,我对数据库进行了概要分析,并完成了以下操作:

    <
  • 插入项/gh>
  • SELECT related tosomethingA
  • UPDATE parentID(到父节点的FK)为NULL

(为了保证数据库中的数据一致性,执行了find()操作,因此执行了插入项)。选择完成,然后我希望执行DELETE…但是parentID = null已经更新了。

在执行Find()之前执行Session.Flush()时,会发生以下情况:

    <
  • 插入项/gh>
  • SELECT related tosomethingA
  • 删除项目

当使用TemplateFlushMode.Commit时,更改在事务结束时完成,并且永远不会插入项:

  • SELECT related tosomethingA

我正在使用的应用程序是使用TemplateFlushMode.Auto,所以我想知道,,是否有一个解释,为什么级联不工作,如果一个选择是在一个项目之间进行添加,然后在同一事务中删除?

我知道出现的第一个答案是"不要将项目添加到集合中,如果它之后将被删除"。但我宁愿不改变业务逻辑。

有人知道为什么使用AUTO时正在做更新而不是delete吗?(当使用Commit时,不插入对象)

Nhibernate - item的ParentID被更新为null,而不是被删除

我想你应该在你的映射文件中使用cascade="delete"选项,以便级联删除

您是否使用双向一对多绑定?你在details表的外键上标注了not-null="true"了吗?你能把你的映射XML文件贴出来以便更好地理解吗?

我知道我还没有回答你的问题,但是我没有足够的声誉来发表评论。