Sono nuovo di NHibernate e C#, quindi per favore sii gentile!Modo minimo e corretto per mappare uno-a-molti con NHibernate
ho le seguenti due entità NHibernate:
Employee
{
private long _id;
private String _name;
private String _empNumber;
private IList<Address> _addresses;
//Properties...
}
e
Address
{
private long _id;
private String _addrLine1;
private String _addrLine2;
private String _city;
private String _country;
private String _postalCode;
//Properties
}
e hanno un rapporto one-to-many
Employee
-Address
(ogni dipendente può avere più indirizzi nella loro record). Ignorando comodamente il fatto che più di un dipendente possa risiedere allo stesso indirizzo.
Lo capisco dal punto di vista degli oggetti in memoria (le entità di NHibernate ). Quello a cui sono alle prese sono i file di mappatura (e sto prendendo un esempio semplice qui). Questo è quello che sono venuto in mente finora:
// Intentionally left out XML and <hibernate-mapping>
// Mappings for class 'Employee'. -->
<class name="Employee" table="Employees">
<id name="ID">
<generator class="native">
</id>
<property name="Name" />
<property name="EmpNumber" />
<bag name="Addresses">
<key column="AddressId" />
<one-to-many class="Address" />
</bag>
</class>
e
// Intentionally left out XML and <hibernate-mapping> .
// Mappings for class 'Address'
<class name="Address" table="Addresses">
<id name="ID">
<generator class="native">
</id>
// Intentionally left out name="Employee"
// as I don't have corresponding field in Address entity.
<many-to-one class="Employee" column="EmployeeID" cascade="all" />
<property name="AddrLine1" />
<property name="AddrLine2" />
<property name="City" />
<property name="Country" />
<property name="PostalCode" />
</class>
- È corretto?
- In caso contrario, sembra che quello che mi manca qui è un campo nell'entità che è un riferimento all'entità
Employee
corrispondente. Ma se è così, allora non posso capire perché questo è necessario: non ho bisogno di andare a prendere unAddress
da unEmployee
, solo il contrario ...
Mi sembra che sia necessaria una relazione molti a molti qui e non uno a molti se gli indirizzi sono univoci nella tabella degli indirizzi. Ciò significherebbe una tabella molti a molti che memorizza un ID dipendente e un ID indirizzo. In questo modo un dipendente può essere collegato a uno o più indirizzi e l'indirizzo può appartenere a più di 1 dipendente. –
@ColeW Non voglio che gli indirizzi appartengano a più di un dipendente. Questo è intenzionale. – markvgti
Se ciò è vero, è necessario aggiungere un ID dipendente nella tabella degli indirizzi per identificare quali indirizzi appartengono a quali dipendenti. Quindi possono esistere più indirizzi nella tabella indirizzi con lo stesso ID dipendente. Questo è il modo in cui nhibernate sarebbe in grado di riempire gli "indirizzi privati IList
" nell'oggetto 'Dipendente'. Suggerirei anche di avere un oggetto 'Employee' come parte dell'oggetto' Address' dato che la navigazione su entrambi i lati della relazione spesso è utile anche se non ha necessariamente senso da una prospettiva di business logic per tutto il tempo. –