Удалить несколько уровней с помощью nhibernate?

У меня есть иерархия таблиц глубиной 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 ответ

Решение

Я понял это... отображения были неправильными.

Они должны быть такими:

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

У меня был неправильный ключевой столбец в каждом.

Другие вопросы по тегам