Mappatura di più valori su un oggetto valore in NHibernate
-
03-07-2019 - |
Domanda
Sono abbastanza nuovo su NHibernate e anche se sto trovando tonnellate di informazioni sulla mappatura di NHibernate sul web, sono troppo sciocco per trovare questa informazione.
Quindi il problema è che ho il seguente modello:
ecco come mi piacerebbe apparire. Una persona pulita con due proprietà dell'indirizzo.
Nel database vorrei persistere in una tabella. Quindi la riga Persona avrebbe un nome di spedizione e una colonna di nome di strada, uno associato a ShippingAddress.Streetname e l'altro a Address.StreetName
Ho trovato un articolo su interfacce fluide , ma non ho ancora capito come farlo attraverso la configurazione XML.
Grazie in anticipo!
Aggiornamento: ho trovato la soluzione da solo. Questo può essere fatto attraverso il nodo e funziona in modo piuttosto semplice.
Per ottenere la mappatura di Address e ShippingAddress ho dovuto solo aggiungere quanto segue a
<component name="Address" class="Address">
<property name="Streetname"></property>
<property name="Zip"></property>
<property name="City"></property>
<property name="Country"></property>
</component>
<component name="ShippingAddress" class="Address">
<property name="Streetname" column="ShippingStreetname" />
<property name="Zip" column="ShippingZip" />
<property name="City" column="ShippingCity" />
<property name="Country" column="ShippingCountry" />
</component>
Soluzione
Ok. Ho trovato la soluzione da solo. La chiave è il costrutto nella configurazione XML e funziona piuttosto bene.
Ecco come è fatto:
<component name="Address" class="Address">
<property name="Streetname"></property>
<property name="Zip"></property>
<property name="City"></property>
<property name="Country"></property>
</component>
<component name="ShippingAddress" class="Address">
<property name="Streetname" column="ShippingStreetname" />
<property name="Zip" column="ShippingZip" />
<property name="City" column="ShippingCity" />
<property name="Country" column="ShippingCountry" />
</component>
Altri suggerimenti
potresti configurarlo come due relazioni. per es.
<many-to-one name="ShippingAddress" class="Yournamespace.Address"/>
<many-to-one name="Address" class="Yournamespace.Address"/>
Non hai nemmeno bisogno di un ID per un indirizzo. Basti pensare a quanto costa mantenere un ID. Hai problemi di concorrenza, hai bisogno di unicità e così via. Questo è l'obiettivo di ValueObjects (non confondersi con System.ValueObject, vedere la definizione DDD per ValueObject). In questo caso Address è un oggetto ValueOb quindi non richiede un ID. E se hai bisogno di una raccolta di indirizzi, mappala come un " " vedi http://www.nhforge.org/doc/nh/ it / index.html # Raccolte ofvalues ??.