1

已經嘗試了幾種解決方案讓NHibernate刪除孤立記錄。 考慮以下結構:沒有得到NHibernate級聯刪除孤兒使用自動映射

public class Parent { 

    public virtual ICollection<Domain> Domains {get;set;} 

} 
public class Domain{ 

    public virtual Parent Parent {get;set;} 
} 

UPDATE: 它無關,與二傳。這導致了其他問題出現了問題,並得到修復。但是,孤兒的缺失仍然不會發生 我曾嘗試以下:

  • 根據http://mookid.dk/oncode/archives/643

  • 新增自動映射像域添加屬性(也可在站點類的Parent屬性) :

    AutoMap.Override<Parent>(map => { map.HasMany(x => x.Domains).Inverse().Cascade.All(); }) 
    AutoMap.Override<Parent>(map => { map.HasMany(x => x.Domains).Cascade.All(); }) 
    

既造成域記錄存儲與PARENT_ID = NULL。

有沒有什麼好的例子來說明如何結合Automapping實現這一點?

+0

我不明白這一點。什麼是Domains.Remove和Domains.Add全部? SetName對我沒有任何意義。對於第一個automapping行:您必須手動設置新創建的域實例中的父屬性,因爲域實例控制關係。之後,域實例應該與父ID保持一致。 – 2012-03-23 09:57:07

+0

這只是模型操作的一個例子。每當Parent.Name更改我需要從集合中刪除1域並添加一個新的。問題不在持久性中,因爲新域名正在被持久化。只是,孤立域記錄不會被刪除,而是將其Parent_Id列設置爲空 – amaters 2012-03-23 10:09:20

+0

您可以發佈模型操作的代碼嗎?如果從Domains集合中刪除域實例並同時操縱/刪除域實例中的父關聯,則可能會發生描述。也許NHibernate很難跟蹤孤立的實例。 – 2012-03-24 10:43:31

回答

3

你沒有指定deleteOrphan

map.HasMany(x => x.Domains).Inverse().Cascade.AllDeleteOrphan() 
+0

感謝您的幫助,但仍然是相同的結果。我仍然得到記錄與null作爲parent_id – amaters 2012-03-29 12:30:12

+0

似乎這沒有工作: 'map.HasMany(x => x.Domains).Cascade.AllDeleteOrphan()' 畢竟我幾乎在那裏:) – amaters 2012-03-29 12:42:43