Когда вы вызываете метод List()
, запрос будет выполнен (и загружен сразу). Если он будет загружать сущности при доступе к ним, это вызовет некоторые потенциальные запросы «Выбрать N + 1», которые могут сильно замедлить работу вашего приложения, и вы можете не заметить его до его запуска.
Я бы сказал, что в большинстве случаев вы хотите, чтобы запрос выполнялся при вызове метода List()
, и вместо этого указываете строки, которые вы хотите в запросе. Однако вы можете использовать linq to nhibernate и работать с интерфейсом IQueryable, чтобы ограничить набор результатов на более позднем этапе.
Суть в том, что может показаться очень хорошей идеей загружать сущности при доступе к ним. Но во многих случаях это вызовет некоторые серьезные проблемы (например, запросы Select N + 1), которые могут убить ваше приложение.
Очень хорошим инструментом для профилирования nhibernate является nhprof . Если вы еще не проверили это, я действительно рекомендовал бы это.