Когда запрос кэшируется, NHibernate будет кэшировать идентификаторы объектов, полученных в результате запроса.
Очень важно, что он не кэширует сами сущности - только их идентификаторы. Это означает, что вы почти наверняка захотите убедиться, что эти объекты также будут кэшироваться в вашем кэше второго уровня. В противном случае NHiberate получит идентификаторы сущностей из кэша запросов, но затем будет вынужден перейти в базу данных, чтобы получить действительные сущности. Это может быть дороже, чем просто идти в базу данных!
Также важно: запросы кэшируются на основе их точных значений SQL и параметров. Любые различия в любом из них будут означать, что база данных будет поражена. Таким образом, вы, вероятно, хотите кэшировать только те запросы, которые имеют небольшие отклонения во входных данных.