Вы должны использовать SQL Server Profiler , чтобы выяснить, что загружается из вашей базы данных.В качестве альтернативы вы можете настроить NHibernate для регистрации SQL.Таким образом, вам будет легче увидеть причину задержки.Очень вероятно, что это вызвано энергичной загрузкой коллекций (ваше отображение имеет lazy="false"
).Если это так, вы можете просто установить его в значение true (по умолчанию).
<bag name="EmployeebyProject" lazy="true">
<key column="EmployeeId"/>
<one-to-many class="EmployeebyProject"/>
</bag>
<bag name="EmployeeComments" lazy="true">
<key column="EmployeeId"/>
<one-to-many class="EmployeeComments"/>
</bag>
Ваша ассоциация «многие к одному» также загружается с нетерпением (fetch="join"
).
Один из популярных подходов состоит в том, чтобы все ассоциации были ленивыми (Lazy Default Fetch Plan).А затем используйте энергичную загрузку в тех местах, где вы уверены, что вам понадобится загруженная ассоциация.Это, однако, зависит от вашего управления сеансом, потому что отложенная загрузка не будет работать, если сеанс больше не доступен.В этой книге .
очень хорошее описание планов и стратегий получения.