O NHibernate é uma ferramenta ORM (Mapeamento Objeto/Relacional) de código aberto e livre para qualquer desenvolvedor utilizar em seus projetos .NET. O NHibernate é o “irmão .net” do Hibernate, que é para a plataforma Java. Você encontra tudo sobre NHibernate e Hibernate aqui: www.hibernate.org

Dedico essa coluna ao Nhibernate, principalmente pela relevância que este projeto tem na comunidade .NET. Além de ser um dos mais bem sucedidos projetos de código aberto em .net (se não for o mais bem sucedido), ele possui uma das comunidades mais comprometidas que eu já vi, principalmente aqui no Brasil. Tente postar uma dúvida no fórum: groups.google.com/group/nhibernate-br e veja só o tempo de resposta.

Além disso, nestes mais ou menos três anos de existência, o NHibernate tem crescido e evoluído muito, tanto internamente com suas funcionalidades básicas, como com ferramentas externas sendo construídas em projetos paralelos, mas intimamente relacionadas ao NHibernate. É um ecossistema de recursos para quem procura soluções efetivas de ORM. Abaixo segue um resumo do que o NHibernate pode fazer por você:

Você prefere modelar o banco de dados ou o modelo de objetos primeiro? Com o NHibernate, você pode começar pelo banco ou pelo modelo de objetos. Se você já tem um database, é só criar seu modelo de objetos e o respectivo mapeamento.

Se não quer ficar perdendo tempo com a criação do seu modelo de objetos e arquivos de mapeamento, existe uma série de ferramentas e templates que lhe ajudam nessa geração de código, um exemplo é o ActiveWriter (altinoren.com/activewriter).

Prefere primeiro modelar seus objetos e depois criar seu banco de dados com base neles? O NHibernate possui recursos que criam todas as tabelas do seu database, com base no mapeamento que você definir.

E mapeamento é outro leque de possibilidades. Você pode realizar seus mapeamentos através dos conhecidos arquivos XML com extensão .hbm. Você pode realizar um mapeamento, decorando sua classe com determinados atributos, através do Castle ActiveRecord (www.castleproject.org/activerecord/documentation/v1rc1/manual/attributedocs/index.html)

E, recentemente, tivemos o lançamento de um outro projeto vinculado ao NHibernate, o Fluent NHibernate (fluentnhibernate.org), que propõe o conceito de mapeamento fluente, onde os mapeamentos são declarados em código C#, em uma classe específica de mapeamento. Essa abordagem é ótima quando o assunto é refactoring, compilação e testes unitários. Suas aplicações são muito simples e você não quer saber de mapeamento? O próprio fluent NHibernate lhe permite os mapeamentos automáticos, que são definidos sem que você tenha que se preocupar com eles.

Imagine então poder combinar todas essas possibilidades de mapeamento acima? Mapeamentos automáticos, fluente e em XML, tudo em uma única aplicação. Só no NHibernate você encontra isso.

E como ficam as queries? Você tem um mar de possibilidades aqui. O NHibernate possui uma linguagem de queries chamada HQL, que pode ser criada em string e tem uma sintaxe muito parecida com SQL.

Temos o método CreateCriteria do objeto de sessão do NHibernate, que combinado com o recurso de Restrictions, pode ser uma alternativa interessante, principalmente na construção de Queries dinâmicas (onde as colunas a serem filtradas também são variáveis).

Existe um outro projeto paralelo chamado nhlambdaextensions, que é um conjunto de métodos de extensão que nos permite fazer uso de expressões lambda. O próprio Castle Active Record citado anteriormente tem sua alternativa para queries. E mais recentemente, tivemos o lançamento do LINQ to NHibernate, que fecha com chave de ouro a questão de queries no NHibernate, permitindo o uso da famosa linguagem LINQ da Microsoft para a construção de queries no NHibernate.

Se você ainda é um dos poucos que não conhece o NHibernate, não perca tempo. Procure por nossos artigos e vídeo-aulas, nas edições impressas e digitais da Devmedia. Tenho certeza que você não vai se arrepender.