I am new to NHibernate and C#, so please be gentle!
I have the following two NHibernate entities:
Employee
{
private long _id;
private String _name;
private String _empNumber;
private IList<Address> _addresses;
//Properties...
}
and
Address
{
private long _id;
private String _addrLine1;
private String _addrLine2;
private String _city;
private String _country;
private String _postalCode;
//Properties
}
and they have a one-to-many
relationship from Employee
to Address
(each
employee can have multiple addresses in their record). Conveniently ignoring
the fact that more than one employee may reside at the same address.
I understand this from the perspective of objects in memory (the NHibernate entities). What I am struggling with are the mapping files (and I am taking an easy example here). This is what I have come up with so far:
// 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>
and
// 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>
- Is this correct?
- If not, it seems like what I am missing here is a field in the
Address
entity that is a reference to the correspondingEmployee
entity. But if so, then I can't understand why this is required: I don't need to fetch anAddress
from anEmployee
, only the other way round...
private IList<Address> _addresses;
in theEmployee
object. I would also suggest you have anEmployee
object as part of theAddress
object as navigation to both sides of the relationship often comes in handy even if it doesn't necessarily make sense from a business logic perspective all the time. – CargileEmployee
reference in theAddress
entity? – NormannormandAddress
entities when their correspondingEmployee
entity is deleted. Could you add this as an answer? Thanks. – Normannormand