Nhibernate - item将其ParentID更新为null而不是删除

时间:2011-12-11 02:12:45

标签: c# nhibernate nhibernate-mapping

流程中的业务逻辑是:

  • 开始交易
  • 将项目添加到集合
  • 执行查找(“somethingA”)
  • 根据上一步删除该项目。
  • 提交交易

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

使用TemplateFlushMode.Auto时,我分析了数据库并完成了以下操作:

  • INSERT item
  • SELECT related tosomethingA
  • 将Item的parentID(父级的FK)更新为NULL

(插入项目已完成,因为find()已完成,以保证数据库中的数据一致性)。选择完成后,我希望执行DELETE ...但是parentID = null的更新已完成。

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

  • INSERT item
  • SELECT related tosomethingA
  • 删除项目

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

  • SELECT related tosomethingA

我正在使用的应用程序正在使用TemplateFlushMode.Auto,所以我想知道,是否有一个解释为什么如果在添加一个项目之后完成选择并且之后删除了级联不起作用同样的交易?

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

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

2 个答案:

答案 0 :(得分:1)

我猜您应该在映射文件中使用cascade="delete"选项以便在删除时级联

答案 1 :(得分:0)

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

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