Questo piccolo tip è per tutti gli sprovveduti che, come me, anche se una marea di persone dicono che non va fatto, hanno comunque pensato di gestire delle collection con un bel many.to.many di NHibernate per scrivere quattro righe di codice in meno!!

La best practice è di non usare il many.to.many con una situazione del genere :

image
In questo caso non ho inserito una reference bidirezionale, ovvero Group è a se stante e non è per forza legato a User. (IMHO Analisi cannata!!) Comunque, in questo caso la soluzione Database era stata questa :

image  
Che ripeto, non va usata!!

Ora mappando il tutto in NHibernate, nella classe Utenti avremo la sezione Bag per gestire i gruppi in questo modo :

    <bag name="Gruppi" table="GRUPPIUTENTE" cascade="all">
      <key column="IdUtente"/>
      <many-to-many column="IdGruppo"
         class="Gruppo"/>
    </bag>

Notate quel cascade="All" ? Beh se non volete impazzire nel Lazy Loading e non volete che le performance degradino in maniera oscena, cambiatelo in "none" e tutto andrà a meraviglia. Ma se potete, lasciate perdere il many-to-many perchè IMHO non porta proprio nessun vantaggio ...

Eh Marco quanto avevi ragione ...