Technorati Tag: ,

Sicuramente questo post scatena una marea di polemiche, ma ... io oggi ho voglia di mapparmi un bel many-to-many, per due semplici motivi.

  1. Primo ragiono ancora a DbDev e quindi per me la normalizzazione viene prima di tutto.
  2. 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:

image (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 :

image

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??? smile_sarcastic