2

次のようにマッピングされた 3 レベルの深さのテーブルの階層があります (QualificationType には多くの Qualifications を持つ多くの 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 を使用しています。

4

1 に答える 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);

それぞれに間違ったキー列がありました。

于 2009-11-06T15:48:36.937 に答える