I have a hierarchy of objects, Order, Contact, Address:
public class Order {
     public virtual Contact BillingContact { get; set; }
}
public class Contact {
     public virtual Address Address { get; set; }
}
I want to query an order by id, and eager load the billingcontact, along with it's address.
var criteria = DetachedCriteria.For<Order>()
     .SetFetchMode("BillingContact", FetchMode.Eager)
This criteria eager loads the BillingContact, but understandably not the address of the BillingContact. If i add:
     .SetFetchMode("BillingContact.Address", FetchMode.Eager)
This does nothing to help.
Also note that these relationships are unidirectional:
public OrderMap()
{
    References(x => x.BillingContact)
        .Not.Nullable()
        .Cascade.All();
}
public ContactMap()
{
    HasOne(x => x.Address)
        .Cascade.All()
        .FetchType.Join();
}
public AddressMap()
{
    Map(x => x.Address1);
} 
How can I construct a criteria object that will load the child of the child? Do these relationship mappings seem correct?
I believe you might need to add an alias to BillingContact to allow you access to it's Address.
Something like:
var criteria = DetachedCriteria.For<Order>()
  .CreateAlias("BillingContact", "bc")
  .SetFetchMode("BillingContact", FetchMode.Eager)
  .SetFetchMode("bc.Address", FetchMode.Eager)
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With