отношение "многие к одному"

У меня есть две таблицы с отношением «многие к одному», и у меня проблемы с производительностью при чтении всех данных из базы данных.

ClassA является родительским для ClassB

Конфигурация ClassA

<id name="Id">
  <generator class="native" />
</id>

<property name="FieldA1" column="FieldA1" />
<many-to-one name="ClassB" column="ClassBId" />

Конфигурация ClassB

<id name="Id">
  <generator class="native" />
</id>

<property name="FieldB1" column="FieldB1"/>

Я хотел бы список объектов classA, где объект ClassA содержит объект classB сразу.

При запросе всех данных из ClassA он работает очень хорошо, но очень медленно, потому что для каждой записи ClassA выполняется оператор sql (выберите * из ClassB, где Id == ClassA.ID), чтобы получить класс B., устанавливающий ленивый флаг значение true, это не решение, потому что мне нужны данные ClassB.

Кто-нибудь знает, как получить NHibernate, чтобы все данные можно было читать с большей производительностью?

Спасибо !


person Andy Vie    schedule 02.02.2011    source источник


Ответы (2)


Вы должны иметь возможность SetFetchMode для FetchMode.Join, а затем он отправит один запрос в базу данных. См. http://davidhayden.com/blog/dave/archive/2008/12/06/ImprovingNHibernatePerformanceFetchingStrategiesFetchModeFluentNHibernate.aspx для примера, который может указать вам правильное направление.

person btilly    schedule 02.02.2011

При написании запроса вы также можете указать тип соединения, если не все ваши ClassA имеют ClassB.

query.CreateAlias("ClassB", "B", JoinType.LeftOuterJoin);
person DerpDerp    schedule 08.02.2011