3

我有 2 个具有多对多关系的类。我想要发生的是,每当我删除一侧时,关联记录将被删除,而不关心我删除哪一侧。

简化模型:

类:

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

我正在尝试级联和反向设置的各种组合,但永远无法实现。如果我没有级联且没有反向,我的集合中会出现重复的实体。在一侧设置 inverse 会使重复消失,但是当我尝试删除一个限定时,我得到一个“已删除的对象将被级联重新保存”。

我该怎么做呢?

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

4

2 回答 2

2

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

您不能期望 NHibernate 会更新您的列表。例如,如果您在数据库中删除了一个 Qualification,它仍然在 Qualifications 列表中,因为您没有在那里删除它。NHibernate 不会(也不应该被允许)更新您的列表。

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

于 2010-06-04T09:28:53.587 回答
0

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

于 2010-04-29T12:19:48.560 回答