.net - 休眠多对多删除

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

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

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

我该怎么做?

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

最佳答案

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

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

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

关于.net - 休眠多对多删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2736928/

相关文章:

c# - 声明要从接口(interface)方法返回的结构

c# - 使用 C# 从音频 CD 导入数据?

nhibernate - 我如何过滤我的 Lucene 搜索结果?

c# - 如何为 NHibernate 创建内部映射类?

c# - 优化 nhibernate session factory,webApp 的启动时间真的很慢

c# - 简单的 FluentNHibernate 父/子映射

c# - 如何将异常标记为已记录(并且只记录一次)?

c# - 是否可以在 C# 中完成虚拟方法?

c# - ninject 将 iunitofwork 注入(inject)存储库范围的属性

c# - NHibernate Criteria QueryByExample 卡在中间的 SQL