Нам нужно создать пользовательскую функцию Get вместо session.Get (). Сначала получите IEntityPersister: session.GetSessionImplementation (). GetEntityPersister (new T ()). Ужасно, потому что нет перегрузки с параметром Type, но работает. Затем мы можем получить кеш и проверить, находится ли сущность в кеше. Если это не так, загрузите все элементы из базы данных. Таким образом, при использовании этой пользовательской функции Get, NHibernate никогда не будет загружать объекты по одному, но все сразу, и будет их кэшировать до истечения срока действия, а затем загружать их снова таким же образом.