Подтвердить что ты не робот

NHibernate Eager загрузка многоуровневых дочерних объектов

У меня есть иерархия объектов, порядок, контакт, адрес:

public class Order {
     public virtual Contact BillingContact { get; set; }
}

public class Contact {
     public virtual Address Address { get; set; }
}

Я хочу запросить заказ по id и с нетерпением загружать billingcontact вместе с этим адресом.

var criteria = DetachedCriteria.For<Order>()
     .SetFetchMode("BillingContact", FetchMode.Eager)

Этот критерий загружает BillingContact, но, по понятным причинам, не адрес BillingContact. Если я добавлю:

     .SetFetchMode("BillingContact.Address", FetchMode.Eager)

Это ничего не помогает.

Также обратите внимание, что эти отношения однонаправлены:

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);
} 

Как я могу построить объект критериев, который будет загружать дочерний элемент дочернего элемента? Правильно ли это сопоставление отношений?

4b9b3361

Ответ 1

Я считаю, вам может понадобиться добавить псевдоним BillingContact, чтобы вы могли получить к нему доступ.

Что-то вроде:

var criteria = DetachedCriteria.For<Order>()
  .CreateAlias("BillingContact", "bc")
  .SetFetchMode("BillingContact", FetchMode.Eager)
  .SetFetchMode("bc.Address", FetchMode.Eager)