2009-11-06 9 views
2

J'ai une hiérarchie des tables 3 niveaux de profondeur (QualificaionType a beaucoup QualificationGroups, qui ont beaucoup de qualités requises) cartographié comme ceci:cascade supprimer plusieurs niveaux avec nhibernate?

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

Lorsque je supprime un groupe de qualification, il supprime toutes les qualifications qui s'y rattachent. Mais lorsque j'essaie de supprimer un type de qualification, il essaie de supprimer tous les groupes de qualification associés, mais pas leurs qualifications.

Comment puis-je l'amener en cascade tout le long de sorte que si je supprime un type, il supprime tous les groupes et toutes leurs qualifications? Dois-je d'abord parcourir tous les groupes et les supprimer? Il semble que cela devrait pouvoir être géré à travers les cartographies seulement.

Pour votre information, j'utilise Fluent NHibernate 1.0RTM et NHibernate 2.1

Répondre

1

j'ai tout compris ... les correspondances étaient incorrects.

Ils devraient être ceci:

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

J'ai eu la colonne mauvaise clé dans chaque.

Questions connexes