I was playing around with NHibernate 3 Alpha 2 and created a simple Model.
I've a Customer, with a List of Orders, which are Mapped to Products by OrderLine.
Now when I'm loading a Customer, I get duplicate Orders (one for every OrderLine it has).
The Mapping (simplified):
Code:
<class name="Customer" table="Customer" >
<id name="Id" type="long" unsaved-value="0">
<generator class="native" />
</id>
{Properties omitted}
<bag name="Orders" cascade="all-delete-orphan" inverse="true" lazy="true">
<key column="CustomerId" not-null="true" on-delete="cascade"/>
<one-to-many class="Order"/>
</bag>
</class>
<class name="Order" table="[Order]" lazy="false">
<id name="Id" type="long" unsaved-value="0">
<generator class="native" />
</id>
{Properties omitted}
<many-to-one name="OrderedBy" class="Customer" column="CustomerId" />
<bag name="OrderLines" cascade="all-delete-orphan" inverse="true" lazy="true">
<key column="OrderId" not-null="true" on-delete="cascade"/>
<one-to-many class="OrderLine"/>
</bag>
</class>
<class name="OrderLine" table="OrderLine" >
<composite-id name="Id" class="OrderLineKey">
<key-many-to-one name="Order" column="OrderId" lazy="proxy" class="Order"/>
<key-many-to-one name="Product" column="ProductId" lazy="proxy" class="Product"/>
</composite-id>
{Properties omitted}
</class>
<class name="Product" table="Product" lazy="false">
<id name="Id" type="long" unsaved-value="0">
<generator class="native" />
</id>
{Properties omitted}
</class>
OrderLineKey Class:
Code:
public class OrderLineKey {
public virtual Order Order { get; set; }
public virtual Product Product { get; set; }
{GetHashCode/Equals Omitted}
}
This is the loading:
Code:
this.Session.QueryOver<Customer>()
.Where(e => e.Id == customerId)
.Fetch(f => f.Orders).Eager
.Fetch(f => f.Orders.First().OrderLines).Eager
.SingleOrDefault()
I don't know if there is a conceptual error in my model or mapping, any advice would be appreciated.