Ленивая загрузка Nhibernate один ко многим не работает должным образом - PullRequest
2 голосов
/ 20 июля 2010

Рассмотрим следующий сценарий:

Класс A имеет отношение один ко многим с классом B. Класс B имеет отношение многие к одному с классом C.

class A {
  IList<B> BList {get;set;}
}
class B {
  C CMember{get;set;}
}

class C {
   //null
}

Если я загружаю класс B из базы данных, используя что-то вроде

   IList<B> result = query.List<B>();

, все работает как положено,

Однако, если я делаю что-то вроде:

   DetachedCriteria query = DetachedCriteria.For(typeof(A));
   query.CreateAlias("B", "B", JoinType.InnerJoin);
   IList<A> result = query.List<A>();

, тогда,NHibernate также выберет из таблицы C и загрузит все Cs.

Отображения ниже: Отображение ...

<bag name="BList " table="B" lazy="true" inverse="false">
    <key column="id" />
    <one-to-many class="B" />
    </bag>

Отображение B ...

<many-to-one class="C" name="CMember" column="idC" lazy="proxy" outer-join="true" />

ЛюбоеИдеи?Спасибо.

1 Ответ

1 голос
/ 15 июня 2011

Я создал пример приложения для тестирования сценария, который вы наметили, и мне не удалось воспроизвести разницу между критериями и DetachedCriteria, они оба вернули один и тот же результат для меня.

Независимо от того, подчиняется ли загрузка свойство lazy, зависит от атрибута external-join, когда он установлен, я всегда загружаю C с нетерпением, когда я удаляю атрибут external-join, он загружает лениво C через прокси.

Таким образом, одним из возможных решений является изменение отображения B на:

<many-to-one class="C" name="CMember" column="idC" lazy="proxy"/>
...