我有 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();
}
我正在尝试级联和反向设置的各种组合,但永远无法实现。 如果我没有级联也没有逆,我会在我的集合中得到重复的实体。 在一侧设置反向会使重复消失,但是当我尝试删除限定条件时,我得到一个“删除的对象将被级联重新保存”。
我该怎么做?
我应该负责清除我删除的每个对象的关联吗?
最佳答案
多对多表实际上是列表(ProfessionalListings
和Qualifications
)的持久形式。当您删除其中一个对象时,它仍然在另一个对象的列表中,不是吗?
您不能期望 NHibernate 会更新您的列表。例如,如果您在数据库中删除了一个 Qualification,它仍然在 Qualifications 列表中,因为您没有在那里删除它。 NHibernate 不会(也不应被允许)更新您的列表。
ProfessionalListings
是逆向列表,这意味着它只加载,不存储。删除资格后,您至少需要更新 Qualifications
列表。这是由业务逻辑管理的类模型中的常规一致性。
关于.net - 休眠多对多删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2736928/