Je développe un exemple d'application pour que je puisse apprendre les tenants et les aboutissants de NHibernate. Je suis aux prises avec un problème de suppression. Je souhaite être en mesure de supprimer un enregistrement enfant en le supprimant de la collection de son parent, puis en enregistrant le parent. J'ai mis en place une relation un-à-plusieurs bidirectionnelle et l'insertion/mise à jour fonctionne très bien.Supprimer un enregistrement enfant de la collection parent
Voici mes applications
Panier:
<bag name="Items" inverse="true" cascade="all"> <key column="BasketId" /> <one-to-many class="BasketItem" /> </bag>
BasketItem:
<many-to-one not-null="true" name="Basket" column="BasketId" />
Je voudrais appeler basket.RemoveBasketItem(BasketItem item)
alors Session.SaveUpdate(basket)
de telle sorte que l'élément du panier sera supprimé . Est-ce possible?
Lorsque mon RemoveBasketItem ressemble à ceci: this.basketItems.Remove (itemToRemove); Je reçois cette erreur: Une collection avec cascade = "all-delete-orphelin" n'est plus référencée par l'instance d'entité propriétaire: Basket.Items –
Vous semblez avoir écrasé la référence 'IList' qui contient les éléments de votre panier. Vous ne pouvez mettre votre propre implémentation de 'IList' que lorsque la référence de la liste est nulle - si vous chargez un panier depuis la BD, NH mettra son propre' PersistentBag' comme implémentation 'IList' - et vous devez laisser cette référence seul pour que la cascade fonctionne correctement. – mookid8000
Je l'ai eu pour travailler! Merci pour votre aide :-) J'avais des problèmes parce que ma propriété panier.Items était en train de lire une liste en lecture seule. Maintenant, je retourne simplement l'instance privée de mes objets. –