Você está na página 1de 14

Criando uma aplicao Web em C#

usando o NHibernate
Apresento neste artigo como criar uma aplicao web totalmente orientada a objetos usando o
framework NHibernate e a linguagem C#.
Nossa meta construir um website com um cadastro de atividades usando os novos controles
GridView e ObjectDataSource, ambos presentes no Framework .NET 2.0. A aplicao possuir as
funcionalidades bsicas de um cadastro, sendo elas: consultar, inserir, editar e remover. Um detalhe
muito importante que nenhuma linha de cdigo SQL ser escrita devido ao uso do NHibernate.
Para desenvolver esta aplicao vamos usar as seguintes ferramentas:
- Visual Studio 2005 (pode ser o Visual Web Developer 2005 Express Edition)
Link: http://msdn.microsoft.com/vstudio/express/vwd/
- MySQL 5.0 Community Edition
Link: http://dev.mysql.com/downloads/mysql/5.0.html
- MySQL Connector 1.0.7: provider pra acessar o MySQL
Link: http://dev.mysql.com/downloads/connector/net/1.0.html
- MyGeneration 1.1.5.1: ferramenta para gerar o mapeamento objeto/relacional para o NHibernate
Link: http://www.mygenerationsoftware.com
- NHibernate 1.0.2: framework para persistncia dos objetos
Link: http://www.nhibernate.org
- Instalao e configurao das ferramentas
Depois de fazer o download de todas as ferramentas citadas acima, instale o MySQL, crie um banco
de dados chamado WebAppOO e uma tabela chamada Atividade com os seguintes campos:
- Id - Int (primary key)
- Nome - Varchar(50), Not null
- Descrio - Varchar(200), Not null
Deve ficar assim:

Agora instale o provider do MySQL e o MyGeneration. No vou cobrir a configurao do


MyGeneration, para isso veja nas referncias desse artigo a documentao sobre o assunto.
O prximo passo descompactar o NHibernate em uma pasta qualquer.
- Criando a aplicao
Abra o Visual Studio e crie uma nova soluo chamada ProjetoWeb. Para isso, clique em File - New
- Project - Other Project Types - Visual Studio Solutions e escolha o template Blank Solution.
Chame a soluo de ProjetoWeb e defina a localizao (de preferncia a mesma do artigo). Veja:

Clique no boto OK e uma soluo vazia ser criada. Agora crie um website, clicando com o boto
direito do mouse sobre a soluo recm criada, escolha Add - New Web Site. Deixe selecionado o
template ASP.NET Web Site e na localizao coloque c:\ProjetosVS\ProjetoWeb\WebAppOO.
Deve ficar da seguinte forma:

Clique em OK para criar o website. Agora vamos montar a nossa interface. Deixe o arquivo
Default.aspx com a seguinte aparncia:

Os controles mais importantes so o GridView e o ObjectDataSource. Repare que somente adicionei


os controles na tela e configurei o nome deles, ainda no fiz nenhuma ligao entre eles. O hyperlink
Inserir Atividade aponta para o arquivo InserirAtividade.aspx. - Web.config
Aps ter criado a aplicao, precisamos adicionar o arquivo Web.config. Nele ficaro as
configuraes do website e tambm as do NHibernate. Para isso, clique com o boto direito sobre o
projeto e selecione Add New Item. Escolha o template Web Configuration File e clique em Add.
Abra o arquivo Web.config que acabou de ser adicionado e procure pelo item configuration. Logo
aps ele, adicione as seguintes linhas:

Todo esse cdigo acima referente a configurao do NHibernate. Se por acaso pretendermos
mudar o banco de dados da aplicao, basta alterar algumas das linhas acima.

- Mapeamento objeto/relacional
Como mencionado anteriormente, no vou entrar em detalhes sobre o MyGeneration. Uma
documentao detalhada sobre ele pode ser encontrada nas referncias desse artigo.
Faremos o mapeamento em um outro projeto, chamado MapeamentoOR. Para isso, clique com o
boto direito sobre a Solution, escolha Add - New Project, selecione o template Class Library, digite
o nome MapeamentoOR e defina o campo Location para C:\ProjetosVS\ProjetoWeb. Veja como
deve ficar:

Clique em OK e logo que o projeto MapeamentoOR for criado, remova o arquivo Class1.cs que ele
gerou automaticamente.
Veja abaixo os arquivos .hbm.xml e .cs que compem o mapeamento da tabela Atividade.
Atividade.hbm.xml

Atividade.cs (perceba que a classe est marcada como Serializable)

A declarao das propriedades Nome e Descricao simplesmente implementam o get e set para a
respectiva varivel private. Tome como exemplo a propriedade Id. Ambos os arquivos foram
gerados com o MyGeneration. Entretanto, fiz algumas alteraes aps a gerao, como por exemplo,
as checagens nos mtodos get e set. A princpio isso no necessrio. Somente as fiz para poder
mostrar o cdigo aqui, caso contrrio ficariam gigantes.
Os dois arquivos devem ser adicionados ao projeto MapeamentoOR e o Atividade.hbm.xml deve ter
a propriedade Build Action configurada para Embedded Resource. Para isso, clique com o boto
direito sobre ele no Solution Explorer e escolha Properties. Logo abaixo aparecero as propriedades
desse arquivo. Configure-as desta forma:

O projeto MapeamentoOR deve estar da seguinte maneira:

Se tudo estiver correto, efetue o Build clicando com o boto direito sobre MapeamentoOR e
escolhendo a opo Build. Depois disso, uma dll chamada MapeamentoOR.dll ser gerada.
No projeto principal (WebAppOO), vamos adicionar uma referncia dll gerada. Clique com o
boto direito sobre ele e escolha Add Reference. Navegue at a aba Projects e l estar a dll do
projeto MapeamentoOR. Veja:

Selecione essa dll e clique em OK. A partir de agora poderemos acessar o mapeamento
objeto/relacional de dentro do website WebAppOO.
- Classe Helper para o NHibernate
Como o NHibernate ser acessado vrias vezes pela nossa aplicao, nada mais sensato do que criar
uma classe com mtodos para facilitar o nosso trabalho. Para a aplicao em questo, precisamos
somente de um mtodo: GetSession(). Ele nos retornar uma sesso com o NHibernate, que
corresponde a uma conexo com o banco de dados.
Alm de facilitar nossa vida nas chamadas ao NHibernate, essa classe ser responsvel por manter
na memria somente uma instncia do mapeamento objeto/relacional. De acordo com a
documentao do prprio framework, o processo de carga do mapeamento muito pesado, portanto
recomenda-se que somente uma instncia do mesmo seja compartilhada entre as requisies.
Tendo em vista esse problema, logo nos surge a idia de usar um dos vrios padres de projeto, o
Singleton. A finalidade desse padro permitir que somente uma instncia de determinada classe
esteja na memria.
Antes de criar a classe helper, precisamos adicionar uma referncia ao arquivo NHibernate.dll ao
WebAppOO. Para isso, clique com o boto direito sobre o projeto WebAppOO e selecione Add
Reference. Navegue at a pasta onde o NHibernate foi descompactado, procure pela pasta bin e
dentro desta procure pelo arquivo NHibernate.dll. Clique em OK.
Aps adicionar essa referncia, o projeto deve ter ficado da seguinte forma:

Repare que outras dlls foram adicionadas junto com a do NHibernate.


Agora adicione um novo arquivo ao projeto WebAppOO (dentro da pasta App_Code) chamado
NHibernateHelper.cs.
Veja o cdigo:

A classe NHibernateHelper prov um mtodo chamado GetSession(). Sua implementao garante


que somente uma instncia do SessionFactory ser criada. - Camada de acesso a dados
Vamos adicionar um novo arquivo ao projeto: AtividadeDAO.cs. Esse arquivo possui mtodos
responsveis por inserir, selecionar, alterar e remover uma atividade. Todos os mtodos dessa classe

vo trabalhar com objetos, ou seja, para inserir uma atividade, por exemplo, no ser usada uma
query SQL, mas sim uma funcionalidade do NHibernate que recebe um objeto e gera a query.
Adicione o arquivo AtividadeDAO.cs na pasta App_Code do projeto WebAppOO. Assim que ele for
criado, j inclua os namespaces System.Collections, NHibernate e MapeamentoOR na sesso using.
Agora vamos codificar todos os mtodos necessrios classe AtividadeDAO. Vamos precisar dos
seguintes mtodos:
- RetornaAtividades(): retorna todas as atividades cadastradas na tabela Atividade. Ele recebe trs
parmetros: column, maximumRows e startRowIndex. O primeiro serve para executar a ordenao e
os dois ltimos a paginao. Cdigo:

Vale a pena ressaltar que a varivel sql no est recebendo um comando SQL, mas sim HQL, que
prprio do NHibernate. Logo, poderia ter sido chamada de hql ao invs de sql.
- SalvaAtividade(): recebe como parmetro um objeto do tipo Atividade e salva ele usando o
NHibernate. Cdigo:

- RetornaAtividade(): recebe como parmetro a Id de uma atividade a ser retornada. Cdigo:

- ExcluirAtividade(): recebe como parmetro uma atividade a ser excluda e exclui ela. Cdigo:

- AtualizaAtividade(): atualiza uma atividade recebida por parmetro. Cdigo:

- Ligao dos controles da interface com a camada de acesso a dados


Depois de implementados os mtodos da classe AtividadeDAO, vamos configurar os controles da
interface (arquivo Default.aspx). Veja abaixo a configurao de cada controle:
GridView
- ID = _grdAtividades
- AllowPaging = true (habilita a paginao);
- PageSize = 5 (configura a paginao para 5 registros por pgina);
- AllowSorting = true (habilita a ordenao);
- DataSourceID = _odsAtividades;
- Na Smart Tag (aquela setinha no canto superior-direito da grid), selecione Enable Selection para
mostrar o boto Select para cada linha da grid.
ObjectDataSource (se ao alterar alguma propriedade desse controle voc for questionado para recriar
os campos da grid, seleciona No. Provavelmente isso vai acontecer ao alterar a DataSourceID)
- Name = _odsAtividades;
- EnablePaging = true (habilita a paginao);
- TypeName = AtividadeDAO (nome da classe que prov os mtodos para selecionar, inserir,
remover e atualizar os dados);
- SelectMethod = RetornaAtividades (nome do mtodo da classe AtividadeDAO que retorna todas as
atividades cadastradas);
- SortParameterName = column (nome do parmetro do mtodo RetornaAtividades que ser usado
para a ordenao dos registros);
- MaximumRowsParameterName = maximumRows (nome do parmetro do mtodo
RetornaAtividades que representa o nmero mximo de linhas que sero mostradas por pgina. No
precisa alterar o valor dessa propriedade, pois ela j vem configurada por padro);
- StartRowIndexParameterName = startRowIndex (nome do parmetro do mtodo RetornaAtividade
que representa o primeiro registro da consulta que ser mostrado. No precisa alterar o valor dessa
propriedade, pois ela j vem configurada por padro).
Aps essas configuraes, j podemos executar pela primeira vez a aplicao. Clique com o boto
direito sobre a Solution e escolha Build Solution. Assim que o Build acabar, execute o projeto. Eu
executei no modo debug e apareceu uma mensagem me informando que o modo debug no estava
habilitado no Web.config. Logo, deixei marcada a opo Modify the Web.config file to enable
debugging e cliquei em OK.
Vejam o resultado da execuo:

Logicamente nenhuma atividade foi listada, pois no h nenhuma cadastrada.


Criamos at agora toda a estrutura do site e a funo consultar. Faltam ainda trs: inserir, editar e
excluir. - Inserir atividade
O cadastro de atividades ser realizado em um arquivo chamado InserirAtividade.aspx, que o
mesmo que foi referenciado no hyperlink Inserir Atividade.
Adicione um novo Web Form ao projeto WebAppOO com o nome InserirAtividade.aspx. Aps
adicion-lo, clique com o boto direito sobre o Default.aspx e defina ele como a pgina inicial
clicando em Set As Start Page, caso contrrio, a aplicao ser iniciada pelo InserirAtividade.aspx.
Configure sua aparncia da seguinte forma:

Repare novamente que no fiz nenhuma configurao em especial, somente alterei a ID dos
controles e o Text.
Agora vamos implementar os eventos relacionados ao boto Salvar e Cancelar. Antes disso, adicione
o using MapeamentoOR.
No boto cancelar, basta dar um duplo clique sobre ele e adicionar o seguinte cdigo ao evento
Click:

No boto Salvar, tambm com um duplo clique, adicione o seguinte cdigo ao evento Click:

Pronto! A est o nosso cadastro de atividades. Rode a aplicao e clique no link Inserir Atividade.
Cadastre algumas atividades e veja o resultado:

Com algumas atividades cadastradas, j podemos ver as funes de paginao e ordenao


implementadas anteriormente. Clique sobre os campos (Id, Nome ou Descrio) para ordenar ou
sobre os nmeros no canto inferior/direito para mudar de pgina.
- Editar e excluir uma atividade

O processo para editar uma atividade semelhante ao de inserir. Para facilitar as coisas, vou usar
outro arquivo chamado EditarAtividade.aspx. Entretanto, acho que a forma mais correta de fazer isso
seria usando um mesmo arquivo para inserir e editar, afinal os campos sempre sero os mesmos.
Desta forma, adicione outro Web Form a nossa aplicao e chame-o de EditarAtividade.aspx. Aps
a criao deste web form, adicione o using MapeamentoOR a ele.
Novamente, defina o Default.aspx como a pgina inicial (boto direito sobre o arquivo Default.aspx
e selecione a opo Set As Start Page).
A interface do EditarAtividade.aspx deve ficar desta forma:

Repare que eu copiei e colei os mesmos controles do InserirAtividade.aspx e adicionei somente um


boto para excluir a atividade em questo. Tambm defini a cor do TextBox cdigo para uma cor
diferente das demais e sua propriedade ReadOnly est como true. Fiz isso, pois, logicamente, a
chave primria do cadastro no poder ser alterada.
Vamos s implementaes dos botes:
- No boto cancelar, duplo clique sobre ele e adicione o seguinte cdigo ao evento Click:

- No boto Salvar, duplo clique sobre ele e o cdigo do evento Click este:

- E, finalmente, no boto excluir, duplo clique sobre ele e o cdigo do evento Click o este:

Agora que j temos os cdigos de todos os botes implementados, ficou faltando somente um
detalhe: como que vou selecionar a atividade que eu desejo editar ou excluir?
Se voc percebeu, existe um boto na grid chamado Select (inclusive esse nome pode ser
personalizado). At agora no falei sobre ele, pois no era o momento. Esse boto ser programado
para funcionar da seguinte maneira: assim que o usurio clicar sobre ele, ser redirecionado para o
arquivo EditarAtividade.aspx. Para que isso seja possvel vamos implementar o evento
SelectedIndexChanged da nossa grid (no arquivo Default.aspx). Clique com o boto direito sobre a
grid, selecione Properties e de um duplo clique no evento SelectedIndexChanged (tome cuidado para
no clicar no SelectedIndexChanging que tem uma funo totalmente diferente). Este evento dever
ser implementado da seguinte forma:

O SelectedIndexChanged ser disparado sempre que o usurio clicar no boto selecte de uma das
linhas da grid. Ao entrar no evento, ele pega a linha que o usurio clicou e o redireciona para a
pgina de edio de atividades, que a EditarAtividade.aspx. Veja que a Id da atividade selecionada
(row.Cells[1].Text) passada como parmetro, por tanto no arquivo EditarAtividade.aspx possvel
carregar uma atividade para ser editada. Para que isso acontea, abra o EditarAtividade.aspx e de um
duplo clique no web form (alguma parte que no tenha nenhum controle). O evento Page_Load que
foi criado dever possuir a seguinte implementao:

Este evento simplesmente carrega a atividade no form para ser editada ou excluda. O mtodo
CarregaAtividade deve estar implementado nesse mesmo arquivo da seguinte forma:

isso! Nosso website com as funes de consultar, inserir, remover e editar est pronto. Para ver
como ficou, rode a aplicao e navegue atravs dos links Select e Inserir Atividade.
- Concluso
Esse artigo foi inspirado pelos dias de estudo dedicados plataforma .NET. Depois de passar alguns
dias procurando a receita de bolo para como construir um website da melhor maneira possvel,
cheguei concluso que existem vrias formas de alcanar esse objetivo. Como dizia Raul Seixas:
"J fui catlico, budista, protestante,
Tenho livros na estante, todos tm explicao."
Em outras palavras, todo mundo defende a sua maneira de pensar, pena que nenhuma delas envolvia
NHibernate e ObjectDataSource.
Enfim, caso tenham alguma dvida sintam-se a vontade para entrar em contato.
- Referncias
NHibernate - Guia inicial
Link: http://www.linhadecodigo.com.br/artigos.asp?id_ac=546
Hibernate 3 - Introduo
Link: http://www.guj.com.br/java.tutorial.artigo.174.1.guj
Hibernate 3 - Avanado
Link: http://www.guj.com.br/java.tutorial.artigo.181.1.guj
MyGeneration - Gerao do mapeamento objeto/relacional
Link: http://www.linhadecodigo.com.br/artigos.asp?id_ac=914
Read more: http://www.linhadecodigo.com.br/artigo/917/criando-uma-aplicacao-web-em-csharp-usando-onhibernate.aspx#ixzz3dqa0quIR

Você também pode gostar