Supprimer un enregistrement enfant du parent collection
Je suis l'élaboration d'un exemple d'application afin que je puisse apprendre les tenants et les aboutissants de NHibernate. Je suis aux prises avec une suppression question. Je veux être en mesure de supprimer un enregistrement enfant en l'enlevant de son parent, de la collecte et de l'enregistrement parent. J'ai la configuration bidirectionnelle "un à plusieurs" de la relation et de l'insertion/mise à jour fonctionne très bien.
Voici mon mappages
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)
puis Session.SaveUpdate(basket)
de sorte que le panier de l'élément va être supprimé. Est-ce possible?
OriginalL'auteur | 2009-06-12
Vous devez vous connecter pour publier un commentaire.
Changement
cascade="all"
encascade="all-delete-orphan"
.cascade="all"
ne supprimer vos enregistrements enfant si le parent est supprimé.On dirait que vous en quelque sorte a remplacé le
IList
de référence de la tenue de votre panier les articles. Vous ne pouvez mettre votre propre mise en œuvre deIList
là lorsque la liste de référence est nul - si vous chargez un panier à partir de la DB, NH va mettre son proprePersistentBag
comme leIList
mise en œuvre - et vous devez quitter cette référence à lui seul pour en cascade pour fonctionner correctement.Je l'ai eu à travailler!!! Merci pour votre aide 🙂 j'ai eu des problèmes parce que mon panier.Les éléments de propriété a été newing une Liste en lecture seule. Maintenant, je suis simplement retourner l'instance privée de mes articles.
Ce changement signifie mon panier items peuvent être modifiées par le client code 🙁 panier.Éléments.Add(). J'ai besoin de regarder cela d'un peu plus.
J'ai l'habitude de faire AddItem/RemoveItem méthodes, et alors mon bien le retour seulement un IEnumerable<Item> - de cette manière, la consommation de code doit de nouveau leur propre Liste ou ce qu'ils veulent faire, et ils n'ont jamais modifier accidentellement la persistance de la liste.
OriginalL'auteur mookid8000
J'ai le même scénario et ive utilisé cascade="all-delete-orphan" dans bagList mais quand je supprime un seul enfant d'un élément dans une collection, il supprime l'objet parent.
Merci pour le commentaire .... c'est le chaînon manquant dans la plupart des inscriptions en ligne!!!
+1 million de dollars, a aidé à m'en sortir, où la plupart des ressources en ligne ne pas mentionner, comme Jonathan dit. Merci!
OriginalL'auteur Muhammad Usman Iqbal
J'ai eu le même problème que initforthemoney en raison de retourner une nouvelle liste de lecture seule à partir de ma collection de lecture. J'ai trouvé que je pouvais continuer à utiliser la lecture seule de la liste en modifiant l'accès à la propriété de la stratégie de la collection de
nosetter
àfield
.OriginalL'auteur John Galambos
J'ai eu un problème où mes enfants d'éléments de retour d'un ordre énumérable.
J'ai déplacé la commande de ma cartographie et retourné les enfants comme il est pour l'interface IEnumerable. Cela a fonctionné pour moi!
OriginalL'auteur Adauto