Удалить несколько уровней с помощью 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);
У меня был неправильный ключевой столбец в каждом.