J'ai une relation many-to-many définie entre deux entités utilisant une table d'association et cascade = "save-update".NHibernate exécution de requête UPDATE supplémentaire
Entity1 contient une liste d'Entity2 et, inversement, Entity2 contient une liste d'Entity1. Le SQL de cette worflow en sortie semble ok ...
- Créer un objet Entité1 et Entity2
- Ajouter à la liste des Entity2 sur Entité1
- Appel session.Save sur Entité1
-> Des instructions d'insertion sont exécutées pour les deux entités, puis un enregistrement inséré dans la table d'association les reliant entre elles.
Cependant, si je premier appel session.Save sur Entity2, ajoutez à la liste, puis appelez session.Save sur Entité1 il y a une piste de déclaration supplémentaire UPDATE qui définit toutes les valeurs de Entité2 exactement la même chose que a été inséré au début.
Bien que ne causant aucun problème, il s'agit d'une requête supplémentaire pour réduire les performances. J'ai joué avec l'attribut inverse, mais cela n'élimine pas l'instruction de mise à jour supplémentaire. Actuellement, les deux côtés ont inverse = "false" car je veux que la table d'association soit mise à jour, quelle que soit l'entité enregistrée.
Des idées?
rappelez-vous qu'une session n'est pas threadsafe.Je pense que la plupart des gens utilisent 'Session-per-request' dans aspnet ou 'session-per-thread' dans les applications –
Oui, en regardant d'autres exemples sur le web je devrais probablement implémenter une construction 'unité de travail' pour gérer la session peut être instancié à l'ouverture d'un formulaire (application client riche dans mon cas) et fermé (disposition de la session) lorsque le formulaire est éliminé. – John