我有两个有很多关系的课程。 我想要发生的是,每当我删除一方时,关联记录将被删除而不关心我删除哪一方。
简化模型:
类:
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 :(得分:2)
多对多表实际上是列表的持久形式(ProfessionalListings
和Qualifications
)。当你删除其中一个对象时,它仍然在另一个对象的列表中,不是吗?
您不能期望NHibernate更新您的列表。例如,如果您删除数据库中的资格认证,它仍然在资格列表中,因为您没有将其删除。 NHibernate不会(也不应该允许)更新您的列表。
ProfessionalListings
是反向列表,这意味着它只被加载,但没有存储。删除资格时,您至少需要更新Qualifications
列表。这是您的类模型中的常规一致性,由业务逻辑管理。
答案 1 :(得分:0)
如果需要删除已连接的对象,可以配置AllDeleteOrphan级联设置。然后,如果从关联中删除对象,它将被删除