O NHibernate dá suporte ao uso de Stored Procedures, e apesar de essa ser uma questão até um pouco contraditória para um ORM, é possível adaptar o NHibernate para realizar praticamente todos os comandos SQL através de Stored procedures.
O segredo do uso de Stored Procedures no NHibernate está nos seus arquivos de mapeamento. São neles que podemos configurar o acesso às SPs. Vamos considerar a existência de uma entidade simples, chamada Cidade, contendo apenas as propriedades Id, Nome e UF (Listagem 1).
Listagem 1. Entidade Cidade
public class Cidade
{
public virtual int Id { get; set; }
public virtual string Nome { get; set; }
public virtual string Uf { get; set; }
}
Para essa entidade temos um arquivo de mapeamento do NHibernate, também muito simples, que você encontra aqui na Listagem 2.
Listagem 2. Mapeamento da Cidade
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Cidade">
<id name="Id" type="Int32" />
<property name="Nome" type="string" length="50" not-null="true" />
<property name="Uf" type="string" length="2" not-null="true" />
</class>
</hibernate-mapping>
...