4 votes

NHibernate Many-To-Many supprime toutes les associations avant de les insérer

J'ai une table Utilisateurs et une table Réseaux avec une relation de plusieurs à plusieurs entre elles (un utilisateur peut être long à plusieurs réseaux et un réseau peut contenir plusieurs utilisateurs). La relation multiple est contenue dans une table "UserNetworks" qui comporte simplement deux colonnes, UserId et NetworkId.

Mes cours ressemblent à ça :

public class User
{
    public IList<Network> Networks {get; set;}
}

public class Network
{
    public IList<Usre> Users {get; set;}
}

Les mappings NHibernate pour ces collections many-to-many ressemblent à ceci :

Utilisateur.hbm.xml :

<bag name="Networks" table="UserNetworks" cascade="save-update" inverse="true">
    <key column="UserId" />
    <many-to-many class="Network" column="NetworkId" />
</bag>

Réseau.hbm.xml :

<bag name="Users" table="UserNetworks" cascade="save-update">
    <key column="NetworkId" />
    <many-to-many class="User" column="UserId" />
</bag>

Dans mon code, je crée une association entre un utilisateur et un réseau comme suit :

user.Networks.Add(network);
network.Users.Add(user);

Je m'attendrais à ce que l'exécution SQL effectue simplement un INSERT dans la table UserNetworks. Au lieu de cela, elle exécute un DELETE dans la table UserNetworks avec NetworkID = X, puis réinsère toutes les lignes de UserNetworks avec la nouvelle association.

Qu'est-ce que je fais de mal ?

5voto

o.k.w Points 15721

Ce comportement est délibéré. Vous voyez, NH ne sait pas ce qui est actuel/nouveau/supprimé dans la liste. Donc, en supprimant tout et en insérant ce qui est dans la liste, cela aura un sens.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X