Используя NHibernate, как я могу проверить, существует ли выполняемый запрос в кеше запросов или нет программно?
Взгляните на http://msdn.microsoft.com/en-us/library/ms174283.aspx. В этой статье приведен пример, в котором извлекается план запроса для конкретного запроса (в разделе «А. Очистка плана запроса из кэша плана»):
SELECT plan_handle, st.text FROM sys.dm_exec_cached_plans WHERE text LIKE N'SELECT * FROM Person.Address%';
Это, однако, не интегрировано в NHibernate, и вам потребуется знать код SQL для вашего запроса.
Один простой способ - включить SQL Profiler. Если вы видите, что запрос попадает в базу данных, значит, он не находится в кэше.