代码之家  ›  专栏  ›  技术社区  ›  Chris Conway

是否使用nhibernate级联删除多个级别?

  •  2
  • Chris Conway  · 技术社区  · 16 年前

    我有一个表3级的层次结构(QualificaionType有许多QualificationGroup,它们有许多限定条件),映射如下:

    // QualificationType
    HasMany(x => x.QualificationGroups)
        .Inverse()
        .KeyColumns.Add("QualificationGroupId")
        .AsBag()
        .Cascade.AllDeleteOrphan()
        .Access.CamelCaseField(Prefix.Underscore);
    
    // Qualification Group
    HasMany(x => x.Qualifications)
        .Inverse()
        .KeyColumns.Add("QualificationId")
        .AsBag()
        .Cascade.AllDeleteOrphan()
        .Access.CamelCaseField(Prefix.Underscore);
    

    当我删除资格组时,它将删除与之相关的所有资格。但当我尝试删除资格类型时,它会尝试删除所有相关的资格组,但不会删除它们的资格。

    我怎样才能让它一路向下级联,这样如果我删除一个类型,它就会删除所有的组和它们的所有限定条件?我需要先遍历所有组并删除它们吗?似乎这应该能够通过映射单独处理。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Chris Conway    16 年前

    我想出来了。。。映射不正确。

    它们应该是:

    // QualificationType
    HasMany(x => x.QualificationGroups)
        .Inverse()
        .KeyColumn("QualificationTypeId")
        .AsBag()
        .Cascade.AllDeleteOrphan()
        .Access.CamelCaseField(Prefix.Underscore);
    
    // Qualification Group
    HasMany(x => x.Qualifications)
        .Inverse()
        .KeyColumn("QualificationGroupId")
        .AsBag()
        .Cascade.AllDeleteOrphan()
        .Access.CamelCaseField(Prefix.Underscore);
    

    我在每一行中都有错误的键列。