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列表。这是由业务逻辑管理的类模型中的常规一致性。