我阅读了这个关于我的问题的帖子,但仍有疑问。
我有两个实体——一个订单和一个任务。订单与其子任务之间存在一对多的关系。
//Order.hbm.xml
<bag name="Tasks" table="Task" inverse="true" cascade="all-delete-orphan">
<key column="OrderID" />
<one-to-many class="Task, Orders" />
</bag>
//Task.hbm.xml
<many-to-one name="Order" column="OrderID" />
我想删除一个任务并让 NHibernate 保持我的订单同步。
我的第一次尝试产生了这个问题:
删除的对象将被级联重新保存
我通过在提交交易之前手动清理 Order 对 Task 的引用来解决这个问题:
public void DeleteTask()
{
NHibernateSessionManager.Instance.BeginTransaction();
//Need to remove Order's reference to Task before deleting so that Task is not resaved.
Task.Order.Tasks.Remove(Task);
TaskDao.Delete(Task);
NHibernateSessionManager.Instance.CommitTransaction();
}
不过,似乎这段代码应该能够由 NHibernate 的 XML 文件处理。这是一个正确的假设吗?我需要如何更改我的 NHibernate 配置,以便在删除任务时自动清理其父订单的引用?