Code:
class Invoice
{
private IList<LineItem> _LineItems;
public Invoice()
{
this._LineItems = new List<LineItem>();
}
public IList<LineItem> LineItems
{
get { return this._LineItems; }
set { this._LineItems = value; }
}
}
Code:
class LineItem
{
private Invoice _Invoice;
public LineItem()
{
}
public Invoice ParentInvoice
{
get { return this._Invoice; }
set { this._Invoice = value; }
}
}
Code:
<class name="YourNamespace.Invoice, YourAssembly" table="Invoices">
...
<bag generic="true" name="LineItems" inverse="true" cascade="all-delete-orphan">
<key column="InvoiceID"></key>
<one-to-many class="YourNamespace.LineItem, YourAssembly"/>
</bag>
</class>
Code:
<class name="YourNamespace.LineItem, YourAssembly" table="LineItems">
...
<many-to-one
name="Invoice"
column="InvoiceID"
class="YourNamespace.LineItem, YourAssembly" />
</class>
This should give you the right idea. Don't forget, just like any other bidirectional collection association you must maintain both sides in your object. ie
Code:
LineItem li = new LineItem();
Invoice1.LineItems.Add(li);
li.ParentInvoice = Invoice1;