业务逻辑的处理内部:NHibernate的 - 项获得其PARENTID更新为空,而不是删除
- 开始交易
- 项目添加到集合
- 执行查找(“somethingA “)
- 根据上一步删除该项目。
- 提交事务
进出口使用级联全删除,孤儿,和逆=真正的,无论是在我的父类。从集合中删除项目时,我设置了.parentObj = null
并从集合中删除项目。
当使用TemplateFlushMode.Auto
,我异型数据库和下面的做:
- INSERT项目
- 选择该项目的相关tosomethingA
- UPDATE的parentID(FK的父)为NULL
(插入项目已完成,因为已完成find()
,以确保数据库中的数据一致性)。选择完成后,我预计会执行DELETE
...但已完成对parentID = null
的更新。
的Find()
前右执行Session.Flush()
时,会发生以下情况:
- INSERT项目
- 选择与tosomethingA
- 删除项目
当使用TemplateFlushMode.Commit
,改变完成在交易结束时,该项目永远不会被插入:
- 选择与tosomethingA
我与使用TemplateFlushMode.Auto
工作的应用程序,所以我不知道,是有原因,如果选择在一个之间进行级联工作不解释项目被添加,然后在同一个事务中删除?
我知道出现的第一个答案是“不要将项目添加到集合,如果它将在以后删除”。但我宁愿不改变业务逻辑。
有没有人知道为什么使用AUTO
时更新正在完成而不是delete
? (当使用Commit
它不插入对象)
嘿阿德里安,很好的问题,我也有同样的问题,你实际上是。 – san983
您能否显示映射? – giammin
我可以问你想用这个做什么?它可能是一个不同的解决方案。 – ivowiblo