3

J'ai 2 classes qui ont une relation plusieurs à plusieurs. Ce que je voudrais arriver, c'est que chaque fois que je supprime un seul côté, les dossiers d'association seront supprimés sans souci de quel côté je supprimer.nhibernate plusieurs à plusieurs suppressions

modèle simplifié:

cours:

class Qualification 
{ 
    IList<ProfessionalListing> ProfessionalListings 
} 

class ProfessionalListing 
{ 
    IList<Qualification> Qualifications 

    void AddQualification(Qualification qualification) 
    { 
     Qualifications.Add(qualification); 
     qualification.ProfessionalListings.Add(this); 
    } 
} 

AutoMapping couramment avec overrides:

void Override(AutoMapping<Qualification> mapping) 
{ 
    mapping.HasManyToMany(x => x.ProfessionalListings).Inverse(); 
} 

void Override(AutoMapping<ProfessionalListing> mapping) 
{ 
    mapping.HasManyToMany(x => x.Qualifications).Not.LazyLoad(); 
} 

J'essaie différentes combinaisons de réglages en cascade et inverse, mais ne peut jamais y arriver. Si je n'ai pas de cascades et pas d'inverse, je reçois des entités dupliquées dans mes collections. Le réglage inverse d'un côté fait disparaître la duplication, mais lorsque j'essaie de supprimer une qualification, j'obtiens un 'objet supprimé qui serait ré-enregistré en cascade'.

Comment faire?

Devrais-je supprimer les associations de chaque objet?

Répondre

0

Si vous devez supprimer un objet connecté, vous pouvez configurer le paramètre de cascade AllDeleteOrphan. Ensuite, si vous supprimez l'objet de l'association, il sera supprimé

+0

Il ne veut pas que l'objet soit enlevé, juste le lien entre eux. –

2

La table plusieurs-à-plusieurs est en fait la forme persistante des listes (ProfessionalListings et Qualifications). Lorsque vous supprimez l'un des objets, il est toujours dans la liste de l'autre, n'est-ce pas?

Vous ne pouvez pas attendre de NHibernate qu'il met à jour votre liste. Par exemple, si vous supprimez une qualification dans la base de données, elle figure toujours dans la liste Qualifications, car vous ne l'avez pas supprimée. NHibernate ne met pas (et ne devrait pas être autorisé à) mettre à jour votre liste.

ProfessionalListings est la liste inverse, cela signifie qu'il est seulement chargé, mais pas stocké. Vous devez au moins mettre à jour la liste Qualifications lorsqu'une qualification est supprimée. C'est une cohérence régulière dans votre modèle de classe qui est géré par la logique métier.

Questions connexes