Desenvolvimento - C#

Geração automática do mapeamento objeto/relacional para o NHibernate usando MyGeneration

Apresento nesse artigo uma forma bem rápida e simples para gerar o mapeamento objeto/relacional para o NHibernate.

por Marcos Dell Antonio



Apresento nesse artigo uma forma bem rápida e simples para gerar o mapeamento objeto/relacional para o NHibernate.

Para os que ainda não conhecem, o NHibernate é um framework para persistência de objetos em um banco de dados relacional. Ou seja, você instancia um objeto, carrega suas propriedades com os valores desejados e manda o NHibernate salvar esse objeto no banco. O NHibernate, através do objeto recebido, monta uma query SQL que será executada no banco de dados desejado.

Todo o processo de geração da query SQL é feito com auxílio dos arquivos de mapeamento. Normalmente para cada tabela do banco de dados são gerados dois arquivos:.hbm.xml e .cs. Aqui é que entra o MyGeneration: ele é um software que gera de forma rápida e simples esses dois arquivos para as tabelas do nosso banco de dados.

Não vou entrar em mais detalhes sobre persistência de objetos com o NHibernate, pois isso é assunto para outro artigo. No final desse, tem alguns links sobre isso.

- Softwares usados

MySQL 5.0 Community Edition: banco de dados que usarei para gerar o mapeamento.
Download: http://dev.mysql.com/downloads/mysql/5.0.html

MySQL Connector 1.0.7: provider .NET para acesso ao MySQL.
Download: http://dev.mysql.com/downloads/connector/net/1.0.html

MyGeneration 1.1.5.1: software que gera o mapeamento.
Download: http://www.mygenerationsoftware.com

- Instalação e configuração dos softwares

Também não vou detalhar a instalação dos softwares, afinal todas são bem intuitivas. Sobre a configuração deles, abaixo segue o que fiz:

MySQL: após instalar o MySQL, criei um banco de dados chamado MapOR e uma tabela chamada Cliente. Vou usar esse banco e essa tabela para criar o mapeamento, mas fique a vontade para criá-lo a partir de qualquer outro banco ou tabela, o processo é o mesmo. Veja na imagem abaixo a tabela criada.

MyGeneration: antes de configurar o MyGeneration instale o provider Connector.

Se no final da instalação do MyGeneration você mandou ele abrir, provavelmente uma janela Default Settings deve ter aparecido. Se você não abriu ainda o MyGeneration ou a tela ainda não apareceu, abra ele agora e no menu Edit clique em Default Settings. Nessa janela será configurado o acesso ao banco MySQL.

Na aba Connection configure o seguinte:

- Em Connection String, no campo Driver selecione MySQL2 e defina a string de conexão de acordo com suas configurações locais. Aqui ficou da seguinte forma:

- Em Language Mapping certifique-se que o campo Language esteja definido como MySQL Connector/Net (C#). Veja como ficou aqui:

- Em Database Target Mapping o campo DbTarget deve estar com o valor MySQL Connector/Net. Veja:

Pronto! O MyGeneration está configurado. Para ver se está funcionando, clique em Test Connection.

Antes de fecharmos a janela de configuração salve o que foi feito. Para isso, digite MySQL no campo Saved Connections e depois clique em Save.

- Gerando os arquivos de mapeamento

Usando o MyGeneration vamos gerar os arquivos .hbm.xml e .cs. Por padrão, o software não vem com os arquivos que precisamos para gerar código para o NHibernate, por isso vamos baixa-los. Todo o processo é muito simples e pode ser realizado de dentro do próprio software.

Clique em File - New - Template Browser. A janela a baixo deverá aparecer:

Veja que, como eu falei anteriormente, não há nenhum arquivo relacionado ao NHibernate.

No Template Browser clique no terceiro botão (Online Template Library - o globo). Ao clicar sobre ele a Online Template Library irá aparecer. É através dela que vou fazer o download do template necessário para gerar os arquivos de mapeamento do NHibernate. Veja abaixo uma imagem da Online Template Library:

Nessa lista de templates procure pela pasta NHibernate. Ao encontrá-la, é possível expandir ela e ver quais templates temos disponível. Veja abaixo os templates que existem atualmente no servidor:

Salve os quatro templates que apareceram clicando no botão salvar (terceiro botão). Não esqueça de manter a pasta NHibernate selecionada antes de clicar no botão salvar.

Agora você já pode fechar essa janela e automaticamente a lista de templates será atualizada para os que estão salvos no seu disco rígido. Se isso não acontecer, clique no primeiro botão (Refresh Template Browser) do Template Browser.

Navegue até a pasta do template do NHibernate e de um duplo clique sobre o último da lista (NHibernate OM - 0.7.1).

Na janela da direta que acabou de abrir será mostrado o código fonte do template selecionado. Qualquer alteração referente a geração do código pode ser feita aí.

Para gerar os dois arquivos de mapeamento (.hbm.xml e .cs) clique no último botão do Template Browser (Execute Template, é uma seta verde). A seguinte janela vai aparecer:

Agora é muito simples. Basta configurar o seguinte:

- Select the output path: local onde serão gerados os arquivos de mapeamento;
- Namespace: nome do namespace que será usado para gerar os arquivos;
- Member variable prefix: prefixo para o nome das variáveis do arquivo .cs;
- Select a database: nome do banco de dados que contem as tabelas que desejamos mapear;
- Select tables: nome da tabela que desejamos gerar os arquivos de mapeamento.

Configurei da seguinte forma:

Agora basta clicar no botão OK e os arquivos serão gerados. No meu caso, foram gerados na pasta c:\MapOR. Veja na imagem abaixo:

Se você der uma olhada no arquivo Cliente.cs, verá que além da declaração das propriedades representando cada campo da tabela Cliente, existem algumas validações, propriedades e métodos que foram gerados automaticamente. Para remover isso, é necessário desmarcar algumas opções na hora de gerar os arquivos de mapeamento.

Também é muito simples editar o template para definir exatamente o que será gerado.

- Conclusão

Produtividade é um fator muito importante no nosso trabalho. Portanto, tudo o que for possível automatizar vai nos poupar tempo. É essa a idéia do MyGeneration.

- Referências

MyGeneration - Code Generation, O/R Mapping and Architectures: site oficial do MyGeneration. Recomendo uma visita ao fórum em caso de dúvidas, pois o pessoal além de responder rapidamente, conhecem muito bem do assunto e sempre passam algumas dicas.
Link: http://www.mygenerationsoftware.com/

NHibernate: site oficial do NHibernate, que recentemente se uniu ao Hibernate. Também recomendo uma visita ao fórum em caso de dúvidas.
Link: http://www.nhibernate.org

Persistência de dados com NHibernate: artigo do site EnterpriseGuys que dá uma excelente introdução ao assunto. Foi lá que eu conheci o MyGeneration.
Link: http://www.enterpriseguys.com/Artigos.aspx?ColunaID=1

Guia inicial do NHibernate: tradução do guia inicial oficial do NHibernate.
Link: http://www.linhadecodigo.com.br/artigos.asp?id_ac=546

Marcos Dell Antonio

Marcos Dell Antonio - Profissional certificado (MCPD, MCTS e MCP) em tecnologias da Microsoft e especialista em .NET e Visual Studio Team System. Site: www.marcosdellantonio.net.