【问题标题】:nhibernate many to many deletes休眠多对多删除
【发布时间】:2011-02-13 18:45:41
【问题描述】:

我有 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 会使重复消失,但是当我尝试删除一个限定时,我得到一个“已删除的对象将被级联重新保存”。

我该怎么做?

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 他不希望对象被删除,只是它们之间的链接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 2016-05-11
      相关资源
      最近更新 更多