3

我有2個類有多對多的關係。 我想要發生的是,只要我刪除一方只有關聯記錄將被刪除,無論我刪除哪一方。nhibernate多對多刪除

簡化模型:

類:

class Qualification 
{ 
    IList<ProfessionalListing> ProfessionalListings 
} 

class ProfessionalListing 
{ 
    IList<Qualification> Qualifications 

    void AddQualification(Qualification qualification) 
    { 
     Qualifications.Add(qualification); 
     qualification.ProfessionalListings.Add(this); 
    } 
} 

流利使用自動映射覆蓋:

void Override(AutoMapping<Qualification> mapping) 
{ 
    mapping.HasManyToMany(x => x.ProfessionalListings).Inverse(); 
} 

void Override(AutoMapping<ProfessionalListing> mapping) 
{ 
    mapping.HasManyToMany(x => x.Qualifications).Not.LazyLoad(); 
} 

我想級聯和反向設置的各種組合,但永遠無法到達那裏。 如果我沒有級聯並且沒有反轉,我會在我的集合中獲得重複的實體。 在一側設置反向會使重複消失,但是當我嘗試刪除限定條件時,我會得到一個「已刪除的對象將通過級聯重新保存」。

我該怎麼做?

我應該負責清除我刪除的每個對象的關聯嗎?

回答

0

如果需要刪除連接的對象,可以配置AllDeleteOrphan級聯設置。然後,如果從關聯中刪除對象,它將被刪除。

+0

他不希望被刪除的對象,只是他們之間的鏈接。 – 2010-06-04 09:17:12

2

多對多表格實際上是列表的永久形式(ProfessionalListingsQualifications)。當你刪除其中一個對象時,它仍然在另一個對象的列表中,不是嗎?

你不能指望NHibernate更新你的列表。例如,如果您刪除數據庫中的資格證書,它仍然位於資格列表中,因爲您沒有將其刪除。 NHibernate沒有(也不應該被允許)更新你的列表。

ProfessionalListings是反向列表,這意味着它只被加載,但不存儲。資格被刪除時,您至少需要更新Qualifications列表。這是由業務邏輯管理的類模型中的常規一致性。