2011-02-02 5 views
0

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

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, чтобы все данные могли быть прочитаны с лучшей производительностью?

Спасибо!

ответ

1

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

+0

Спасибо, используя FetchMode.Join, он работает намного лучше. –

0

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

query.CreateAlias("ClassB", "B", JoinType.LeftOuterJoin); 
Смежные вопросы