NHibernate یک ORM است که شما را ترغیب میکند برای دسترسی به دیتابیس از APIهای خاص خودش یعنی HQL، ICriteria و Linq-to-NHibernate استفاده کنید. اما راه را برای آنها که به هر دلیل ترجیح میدهند یا مجبورند از SQL استفاده کنند نبسته است. NHibernate دو راه برای انجام این کار دارد: استفاده از ISession.CreateSQLQuery و استفاده از Named SQL queries.
استفاده از راه حل اول خیلی سر راست است ولی چون برنامهنویس را تشویق میکند کوئری SQL را در متن کدهای C# نگهداری کند توصیه نمیشود. در عوض راه حل دوم یعنی Named SQL queries تمیزتر و قابل انعظافتر عمل میکند. در این روش شما Queryهای مورد نظر را درست مشابه mappingها در فایلهایی با پسوند .hbm.xml نگهداری میکنید. به این ترتیب هم کدهای C# و اسکریپتهای SQL با هم قاطی نمیشوند و هم ممکن است بتوانید از یک سری بهینهسازیها و cachingهای SQL Server بهرهمند شوید.
به عنوان یک نمونه از Named SQL queries به مورد زیر توجه فرمایید. منتها توجه داشته باشید که فایل query حتماً باید به صورت Embedded Resource کامپایل شده و dll آن به کمک AddAssembly به فهرست Assemblyها اضافه شده باشد.
برای کسب اطلاعات بیشتر به Documentation مربوط به NHibernate در nhforge مراجعه کنید.