级联用nhibernate删除多个级别?

时间:2009-11-06 15:08:14

标签: nhibernate cascading-deletes

我有3层深度的表层次结构(QualificaionType有许多QualificationGroups,它有很多资格证书)映射如下:

// 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);

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

如何让它一直向下级联,这样如果我删除一个类型,它会删除所有组及其所有资格?我是否需要先遍历所有组并删除它们?看来这应该只能通过映射来处理。

仅供参考,我正在使用Fluent NHibernate 1.0RTM和NHibernate 2.1

1 个答案:

答案 0 :(得分:1)

我想通了......映射不正确。

他们应该是这样的:

// 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);

每个键都有错误的键列。