2011-12-11 35 views
8

业务逻辑的处理内部: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它不插入对象)

+0

嘿阿德里安,很好的问题,我也有同样的问题,你实际上是。 – san983

+1

您能否显示映射? – giammin

+0

我可以问你想用这个做什么?它可能是一个不同的解决方案。 – ivowiblo

回答

0

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

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

1

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

相关问题