Sicuramente questo post scatena una marea di polemiche, ma ... io oggi ho voglia di mapparmi un bel many-to-many, per due semplici motivi.
- Primo ragiono ancora a DbDev e quindi per me la normalizzazione viene prima di tutto.
- Secondo non ho tempo per sta qui a creare enties che sono Collection di altre e cosi' via ...
Veniamo a noi. Primo parte, il Dominio. Abbiamo una bella classe Computer esposta come segue:
(Scusate ma il mio UML designar fa pena).
Comunque, in questo caso ho una Many-to-Many e adesso vi spiego il perchè. Le stampanti vengono persistite nella tabella Stampanti che non deve avere una relazione diretta con i Computers, questo perchè non è detto che una stampante debba per forza essere associata ad un Computer. Idem con patate per i Computers, che non è detto debbano obbligatoriamente avere una o piu' stampanti.
Quindi nel Db ho questa situazione :
Mi è stato detto che era una cosa non corretta e che NHibernate non lavora bene con questo tipo di Mapping. Beh per farla breve, il file di Mapping della classe Stampante non ha alcun riferimento a Computers e cosi' deve essere. Al contrario la classe Computer viene cosi' mappata:
<class name="Computer" table="COMPUTERS">
<id name="Id" unsaved-value="0">
<generator class="identity" />
</id>
<property name ="Nome"/>
<property name ="Modello"/>
<property name ="Sid"/>
<property name ="Garanzia"/>
<property name ="DataAcquisto"/>
<property name="Tipologia" column= "Tipologia"
type="GestioneUtenti.Entity.TipoComputer, GestioneUtenti.Entity" />
<many-to-one name="Fornitore" column="IdFornitore" fetch="select" />
<bag name="Stampanti" table="Stampanti_Computers" cascade="all">
<key column="ComputerId"/>
<many-to-many column="StampanteId"
class="Stampante, NHibernateManyToMany"/>
</bag>
</class>
Ora la polemica è : perchè mi sconsigliate questa tecnica che a me (IMHO) funziona una meraviglia???