1

Après avoir essayé plusieurs solutions pour que NHibernate supprime les enregistrements orphelins. Compte tenu de la structure suivante:Ne pas obtenir NHibernate Cascade Supprimer Orphan travaillant avec Automapping

public class Parent { 

    public virtual ICollection<Domain> Domains {get;set;} 

} 
public class Domain{ 

    public virtual Parent Parent {get;set;} 
} 

MISE À JOUR: Cela n'a rien à voir avec le compositeur. Cela a causé quelque chose d'autre qui a mal tourné qui a été réparé. Mais la suppression des orphelins ne toujours pas le cas j'ai essayé ce qui suit:

  • Ajouter un attribut sur des domaines (et sur la propriété des parents de la classe de domaine) selon http://mookid.dk/oncode/archives/643

  • Ajouté AutoMapping comme :

    AutoMap.Override<Parent>(map => { map.HasMany(x => x.Domains).Inverse().Cascade.All(); }) 
    AutoMap.Override<Parent>(map => { map.HasMany(x => x.Domains).Cascade.All(); }) 
    

deux CAUSÉS les enregistrements de domaine à enregistrer avec pARENT_ID = null.

Existe-t-il un bon exemple sur la façon d'y parvenir en combinaison avec Automapping?

+0

je ne comprends pas. Qu'est-ce que Domains.Remove et Domains.Add tout? SetName n'a aucun sens pour moi. Et pour la première ligne de mappage automatique: vous devrez définir manuellement la propriété parent dans une instance de domaine nouvellement créée, car l'instance de domaine contrôle la relation. Après cela, l'instance de domaine doit être conservée avec l'ID parent. –

+0

Ce n'est qu'un exemple sur la manipulation de modèles. Chaque fois que Parent.Name change, j'ai besoin de supprimer 1 domaine de la collection et d'en ajouter un nouveau. Le problème n'est pas dans la persistance car de nouveaux domaines sont en cours de persistance. Il est juste que les enregistrements de domaine orphelins ne sont pas supprimés mais à la place ont leur colonne Parent_Id définie à null – amaters

+0

pourriez-vous poster le code pour la manipulation du modèle? Ce que vous décrivez peut éventuellement se produire si vous supprimez votre instance de domaine de la collection Domains et en même temps manipulez/supprimez l'association Parent dans l'instance de domaine. Peut-être que NHibernate a du mal à suivre l'instance orpheline. –

Répondre

3

vous n'avez pas spécifié deleteOrphan

map.HasMany(x => x.Domains).Inverse().Cascade.AllDeleteOrphan() 
+0

Merci pour l'aide mais toujours le même résultat. Je reçois encore des enregistrements avec null comme parent_id – amaters

+0

Semble cela ne fonctionne: 'map.HasMany (x => x.Domains) .Cascade.AllDeleteOrphan()' Après tout ce que j'était presque là :) – amaters

Questions connexes