2012-09-11 70 views
0

我读this thread regarding my issue但仍有问题。父母在NHibernate中仍然有引用时删除子对象

我有两个实体 - 一个订单和一个任务。订单与其子任务之间存在一对多的关系。

//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保持我的订单在同步。

我第一次尝试产生的问题:

删除的对象将通过级联重新保存

我通过提交我的交易之前手动清理顺序的参考工作解决了这个:

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配置,以便在删除任务时,引用也会自动清除其父级订单?

回答

3

其实,既然你有cascade="all-delete-orphan",你可以没有明确的Delete()

public void DeleteTask() 
{ 
    NHibernateSessionManager.Instance.BeginTransaction(); 
    Task.Order.Tasks.Remove(Task); 
    NHibernateSessionManager.Instance.CommitTransaction(); 
} 

这是更DDD十岁上下,你可以做从模型itelf的更改,而在NH任何引用,然后让NH的更改跟踪负责删除操作。

相关问题