Ich entwickle eine Beispielanwendung, damit ich die Grundlagen von NHibernate lernen kann. Ich habe Probleme mit einem Löschproblem. Ich möchte in der Lage sein, einen untergeordneten Datensatz zu löschen, indem ich ihn aus der Auflistung seiner übergeordneten Elemente lösche und dann den übergeordneten Datensatz speichere. Ich habe eine bidirektionale Eins-zu-viele-Beziehung eingerichtet und das Einfügen/Aktualisieren funktioniert großartig.Löschen eines untergeordneten Datensatzes aus der übergeordneten Sammlung
Hier sind meine Zuordnungen
Basket:
<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" />
Ich möchte basket.RemoveBasketItem(BasketItem item)
rufen dann Session.SaveUpdate(basket)
, so dass der Korbposition wird gelöscht . Ist das möglich?
Wenn mein RemoveBasketItem wie folgt aussieht: this.basketItems.Remove (itemToRemove); Ich erhalte diesen Fehler: Eine Sammlung mit cascade = "all-delete-orphan" wurde von der besitzenden Entity-Instanz nicht mehr referenziert: Basket.Items –
Klingt so, als hättest du irgendwie die 'IList'-Referenz überschrieben, die deine Warenkorb-Objekte enthält. Sie können nur Ihre eigene Implementierung von 'IList' dort einfügen, wenn der Listenverweis null ist - wenn Sie einen Korb aus der DB laden, wird NH seinen eigenen' PersistentBag' als 'IList'-Implementierung angeben - und Sie müssen diesen Verweis belassen allein, damit Kaskade richtig funktioniert. – mookid8000
Ich habe es zur Arbeit gebracht! Vielen Dank für Ihre Hilfe :-) Ich hatte Probleme, weil meine basket.Items -Eigenschaft eine schreibgeschützte Liste aufbaute. Jetzt gebe ich einfach die private Instanz meiner Artikel zurück. –