nhibernate许多删除

时间:2010-04-29 11:40:04

标签: .net nhibernate fluent-nhibernate many-to-many cascading-deletes

我有两个有很多关系的课程。 我想要发生的是,每当我删除一方时,关联记录将被删除而不关心我删除哪一方。

简化模型:

类:

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();
}

我正在尝试级联和反向设置的各种组合,但永远无法实现。 如果我没有级联而且没有逆,我会在我的集合中获得重复的实体。 在一侧设置反向使得复制消失但当我尝试删除资格时,我得到一个'删除的对象将被级联重新保存'。

我该怎么做?

我应该负责清除我删除的每个对象的关联吗?

2 个答案:

答案 0 :(得分:2)

多对多表实际上是列表的持久形式(ProfessionalListingsQualifications)。当你删除其中一个对象时,它仍然在另一个对象的列表中,不是吗?

您不能期望NHibernate更新您的列表。例如,如果您删除数据库中的资格认证,它仍然在资格列表中,因为您没有将其删除。 NHibernate不会(也不应该允许)更新您的列表。

ProfessionalListings是反向列表,这意味着它只被加载,但没有存储。删除资格时,您至少需要更新Qualifications列表。这是您的类模型中的常规一致性,由业务逻辑管理。

答案 1 :(得分:0)

如果需要删除已连接的对象,可以配置AllDeleteOrphan级联设置。然后,如果从关联中删除对象,它将被删除