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

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

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

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

Я хочу запросить заказ по идентификатору и с нетерпением жду загрузки контакта для выставления счетов вместе с его адресом.

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

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


person Sam Mueller    schedule 18.02.2009    source источник


Ответы (1)


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

Что-то типа:

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