Они используют его для возврата сущностей, но запросы идут прямо в БД, если вы не используете кэш второго уровня.
Учтите это:
var fooUsingGet = session.Get<Foo>(fooId);
var fooQueryById = session.Query<Foo>().Single(f => f.Id == fooId);
Выполнены два запроса (одиндля Get (одна для Query), но обе переменные содержат одну и ту же ссылку на объект.
Теперь, если вы включите кэш 2-го уровня, кеширование запросов и укажите кеширование для запроса:
var fooQueryById = session.Query<Foo>().Cacheable()
.Single(f => f.Id == fooId);
var fooQueryByIdAgain = session.Query<Foo>().Cacheable()
.Single(f => f.Id == fooId);
Будет выполнен только один запрос.