2009-07-20 53 views
11

免責聲明:我是一個NHibernate的noobie所以希望這個問題是有道理的,我有兩個班像之間的許多一對多的關係...NHibernate的級聯=保存更新「

public class Entity1 
{ 
    public virtual Guid EntityId { get; set; } 
    public virtual IList<Entity2> Entity2List; 
} 

Public class Entity2 
{ 
    public virtual Guid EntityId { get; set; } 
    public virtual IList<Entity1> Entity1List; 
} 

我的一切。在這兩個類映射中添加了一個多對多的關係,定義了一個關聯表,但我不確定要使用哪個級聯選項。我希望能夠創建一個新的Entity1實例,將一個新的Entity2實例添加到它的列表中,調用Save,並將兩者都插入到數據庫中(反之亦然)。刪除實體時,應該刪除與子實體的關聯,但不要刪除子實體本身。是否應該使用cascade =「save-update」?

回答

25

是的。在這種情況下,聽起來像'save-update'就是你想要的。

我從來沒有在文檔中找到關於每個級聯選項的很好的解釋,但已經使用Ayende的這個blog post作爲參考。

  • - 不要做任何級聯,讓用戶自己處理它們。
  • 保存更新 - 當保存/更新對象時,請檢查關聯並保存/更新任何需要它的對象(包括在多對多場景中保存/更新關聯)。
  • 刪除 - 刪除對象時,刪除關聯中的所有對象。
  • delete-orphan - 刪除對象時,刪除關聯中的所有對象。除此之外,當一個對象從關聯中刪除並且不與另一個對象(孤立的)關聯時,也將其刪除。
  • 全部 - 當一個對象是保存/更新/刪除時,檢查關聯並保存/更新/刪除找到的所有對象。
  • all-delete-orphan - 當對象爲save/update/delete時,檢查關聯並保存/更新/刪除找到的所有對象。除此之外,當一個對象從關聯中刪除並且與另一個對象(孤立的)沒有關聯時,也刪除它。