2010-10-18 3 views
3

Je ne peux pas NHibernate pour supprimer cet objet enfant, il se termine sans lancer aucune exception et sans rien supprimer:NHibernate ne pas supprimer l'objet enfant

public void DeleteW9(int vendorId, int vendorW9Id) 
    { 
     var vendor = vendorRepository.Get(vendorId); 
     var W9 = vendor.W9.Where(x => x.Id == vendorW9Id).First(); 
     vendor.W9.Remove(W9); 
     vendorRepository.SaveOrUpdate(vendor); 
    } 

Voici mon cartographie du vendeur:

 mapping.HasMany(x => x.W9) 
       .KeyColumn("VendorFk") 
       .Cascade.AllDeleteOrphan() 
       .AsBag(); 

Ma table VendorW9 contient une référence à l'ID du fournisseur sous la forme de VendorFk. Je n'ai pas de configuration de restriction, dois-je configurer une relation de clé primaire? NHibernate fonctionne bien pour tout mais en supprimant les orphelins.

Répondre

1

Essayez d'ajouter vendorRepository.Commit():

public void DeleteW9(int vendorId, int vendorW9Id) 
{ 
    var vendor = vendorRepository.Get(vendorId); 
    var W9 = vendor.W9.Where(x => x.Id == vendorW9Id).First(); 
    vendor.W9.Remove(W9); 
    vendorRepository.SaveOrUpdate(vendor); 
    vendorRepository.Commit(); 
} 
+0

C'est, merci! –

+0

Pouvez-vous expliquer pourquoi cela fonctionne? – UpTheCreek

+0

Il semble que NHibernate doit être explicitement dit de valider les modifications afin de supprimer les orphelins. –

Questions connexes