業務邏輯的處理內部: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