2012-09-11 104 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的更改跟蹤負責刪除操作。

相關問題