Je ces 2 objets NHibernate formant une relation plusieurs à plusieurs:Retirer d'un côté des nombreux à beaucoup dans Nhibernate
utilisateur:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Providers" namespace="Providers.Objects">
<class name="User" table="Users">
<id name="UserId" type="int">
<generator class="native" />
</id>
<many-to-one name="Application" column="ApplicationId" cascade="none" />
<property name="UserName" type="string" />
<property name="LoweredUserName" type="string" />
<property name="MobileAlias" type="string" />
<property name="IsAnonymous" type="bool" />
<property name="LastActivityDate" type="DateTime" />
<bag name="Roles" table="UsersInRoles" lazy="true" cascade="none" >
<key column="UserId"></key>
<many-to-many class="Role" column="RoleId"></many-to-many>
</bag>
</class>
</hibernate-mapping>
Et Rôle:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Providers" namespace="Providers.Objects">
<class name="Role" table="Roles">
<id name="RoleId" type="int">
<generator class="native" />
</id>
<many-to-one name="Application" column="ApplicationId" class="Application" cascade="none" />
<property name="RoleName" type="string" />
<property name="LoweredRoleName" type="string" />
<property name="Description" type="string" />
<bag name="Users" table="UsersInRoles" lazy="true" inverse="true" cascade="none" >
<key column="RoleId"></key>
<many-to-many class="User" column="UserId"></many-to-many>
</bag>
</class>
</hibernate-mapping>
Supposons que le rôle backupoperator comporte des utilisateurs. Si je tente de supprimer l'un des utilisateurs de l'instance de rôle, comme:
var backupoperator = GetRoleByName(session, app.ApplicationId, "backupoperator");
backupoperator.Users.RemoveAt(0);
session.Update(backupoperator);
transaction.Commit();
Il ne fonctionne pas :(L'association reste inchangée dans la base de données Lorsque je tente le contraire (supprimer un rôle d'un utilisateur. objet et mise à jour de l'objet utilisateur), cela fonctionne Est-ce dû à l'attribut inverse dans le mappage NHibernate?
Comment accomplir ce que j'essaie de faire? (supprimer un utilisateur d'un rôle, mettre à jour le rôle et ayant cela persisté)?
Merci
Merci Diego, savez-vous ce que serait la commande HQL pour supprimer un rôle et supprimer toutes ses associations (ne pas supprimer les utilisateurs, mais supprimer les associations avec les utilisateurs)? J'ai du mal à trouver ça. Si je parcourt tous les utilisateurs et que j'appelle session.Supprimer sur chaque utilisateur, je vais avoir plusieurs allers-retours à la base de données (peut-être des centaines dans certains cas). – qwerty2010
Vous n'aurez pas autant d'allers-retours si vous utilisez le traitement par lots, voir http://nhforge.org/doc/nh/fr/index.html#performance-batch-updates –
Génial, merci de m'avoir informé. – qwerty2010