je relation parent/enfant, et l'enfant ont id compositeNHibernate - problème avec des collections fusion
Parent
<id name="Id" type="Int32">
<generator class="identity" />
</id>
<set name="Children" table="CTable" cascade="all-delete-orphan" inverse="true" lazy="false" >
<key column="ParentId"/>
<one-to-many class="ChildrenClass"/>
</set>
enfant
<composite-id unsaved-value="none">
<key-property name="ParentId"/>
<key-property name="ChildId"/>
</composite-id>
Ce que je veux: 1) Inscrivez-vous Parent à partir de la base de données, fermez la session, passez Parent du service au client 2) Lorsque Parent est de retour du client, enregistrez-le et tous ses enfants dans la base de données, dans un nouvelle session
À l'étape 2, j'appelle var merged = Session.Merge (product); J'utilise Merge() car il semble que le seul moyen de faire en sorte que NHib gère les éléments ajoutés/supprimés dans la collection enfants .. MAIS nHibernate réinitialise tous les id-s des enfants nouvellement ajoutés, donc j'ai de nouveaux enfants avec ParentId == 0 et ChildId == 0. Donc la question est - comment dire à NHibernate de garder les ids de l'entité qui est passée dans Merge()? .. S'il vous plaît aider.
Merci pour votre réponse! Si j'ajoute dans Child reference to Parent, comment pourrais-je maintenir la collection d'enfants dans le parent? Quand les deux références Parent.Children & Child.Parent sont présentes, cela conduit à StackOverflowException (évidemment) .. J'aimerais avoir une collection d'enfants dans le parent pour que je puisse naviguer à travers eux .. Est-ce possible? – Dmitry
"De toute évidence"? Vous avez tort. Les relations bidirectionnelles sont entièrement prises en charge par NHibernate. Je suggère que vous lisiez les docs en premier. –
Diego, j'ai réussi à le faire fonctionner, je ne sais pas pourquoi ça n'a pas été le cas pour la première fois. Merci! – Dmitry