Já seguimos as instruções relacionadas durante a primeira e a segunda etapa deste
artigo, relembramos as seguintes tarefas:
- Definição da sessão NHibernate;
- Definição da Interface
IUsuarioRepositorio
definindo os métodos CRUDs que serão
implementados; - Definição da classe UsuarioRepositorio
que implementa a interface definida;
Agora já temos tudo pronto para usar os recursos do NHibernate em nossa
aplicação ASP .NET e realizar as operações CRUD relacionadas com as manutenção
das informações da tabela Usuario.
Só é preciso definirmos a interface da aplicação
que será a página ASP .NET Default.aspx e usar os recursos que criamos
até aqui no projeto.
Neste momento a nossa solução deverá ter a seguinte estrutura:

Eu optei criar as classes e os arquivos de
configuração em um mesmo projeto e no mesmo local. Fiz isso porque o projeto é bem simples e para tornar mais fácil a
visualização da estrutura.
Para projetos maiores é aconselhável criar pastas distintas para as
classes e para os arquivos de configuração no mesmo projeto. Pode-se ainda criar projetos distintos para dividir a solução em camadas
o que esta mais aderente as boas práticas.
Então vamos ao trabalho:
Selecione e abra a página Default.aspx e inclua a
partir da toolbox nesta páginas os seguintes controles:
- 7 Labels
- 6 TextBox
- 1 GridView
- 4 Buttons
Conforme o layout da figura abaixo (os IDs dos
controles estão definidos abaixo).

É importante definir a propriedade DatKeyNames
do controle GridView como sendo igual a usuarioid. Editando o controle GridView na opção Edit
Columns deveremos configurar o controle conforme abaixo:

Agora temos que definir o código usado na página
Default.aspx no arquivo code-behind Default.aspx.cs. Primeiro definimos o namespace usado na página: Imports
NHibernate. A seguir definimos uma variável que representa a
classe UsuarioRepositorio que implementa os métodos CRUD e usa a sessão
NHibernate: Dim
repositorio As UsuarioRepositorio
Agora vamos definir o código em cada evento da
página conforme a seguir: no evento
Load da página temos o código abaixo que chama a rotina carregaUsuarios
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load<br /><br /> If Not IsPostBack Then<br /><br /> carregaUsuarios()<br /><br /> End If<br /><br /> End SubA rotina carregaUsuarios() possui o seguinte código:
<strong> Private Sub carregaUsuarios()<br /><br /> repositorio = New UsuarioRepositorio()<br /><br /> Dim resultado = repositorio.getAllUsuarios()<br /><br /> gdvUsuarios.DataSource = resultado<br /><br /> gdvUsuarios.DataBind()<br /><br /> End Sub</strong>Neste código criamos uma instância da classe
UsuarioRepositorio e usamos o método getAllUsuarios() para obter os
usuários e exibir no GridView. Ao ser executada o projeto teremos a exibição da
página abaixo:

No evento SelectedIndexChanged temos o
código que verifica se uma linha do grid foi selecionada e em caso positivo
exibe os dados nos controles TextBox da página:
<strong>Protected Sub gdvUsuarios_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles gdvUsuarios.SelectedIndexChanged<br /><br /> If gdvUsuarios.SelectedDataKey IsNot Nothing Then<br /><br /> Label1.Text = String.empty<br /><br /> txtId.Text = gdvUsuarios.SelectedDataKey.Value.ToString()<br /><br /> txtNome.Text = gdvUsuarios.SelectedRow.Cells(2).Text<br /><br /> txtLogin.Text = gdvUsuarios.SelectedRow.Cells(3).Text<br /><br /> txtSenha.Text = gdvUsuarios.SelectedRow.Cells(4).Text<br /><br /> txtPerfil.Text = gdvUsuarios.SelectedRow.Cells(5).Text<br /><br /> txtEmail.Text = gdvUsuarios.SelectedRow.Cells(6).Text<br /><br /> End If<br /><br /> End Sub</strong>O resultado pode ser visto na figura abaixo:

O código do evento Click do botão Incluir é
mostrado a seguir. No código é criado uma instância de usuario e
atribuído os valores informados na página web e em seguida usamos o método
Add para incluir o usuário.
<strong>Protected Sub btnIncluir_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnIncluir.Click<br /><br /> Dim usuario As New Usuario()<br /><br /> usuario.Nome = txtNome.Text<br /><br /> usuario.Login = txtLogin.Text<br /><br /> usuario.Senha = txtSenha.Text<br /><br /> usuario.Perfil = txtPerfil.Text<br /><br /> usuario.Email = txtEmail.Text<br /><br /> repositorio = New UsuarioRepositorio()<br /><br /> repositorio.Add(usuario)<br /><br /> Label1.Text = "usuário incluído com sucesso."<br /><br /> carregaUsuarios()<br /><br /> End Sub</strong>O resultado é exibido a seguir:

No evento Click do botão Alterar temos o
código que cria uma nova instância de usuario e usa o método Update
para alterar o registro selecionado:
<strong>Protected Sub btnAlterar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAlterar.Click<br /><br /> Label1.Text = String.empty<br /><br /> Dim usuario As New Usuario<br /><br /> usuario.UsuarioId = Convert.ToInt32(txtId.Text)<br /><br /> usuario.Nome = txtNome.Text<br /><br /> usuario.Login = txtLogin.Text<br /><br /> usuario.Senha = txtSenha.Text<br /><br /> usuario.Perfil = txtPerfil.Text<br /><br /> usuario.Email = txtEmail.Text<br /><br /> repositorio = New UsuarioRepositorio()<br /><br /> repositorio.Update(usuario)<br /><br /> Label1.Text = "usuário alterado com sucesso."<br /><br /> carregaUsuarios()<br /><br /> End Sub</strong>Abaixo vamos o resultado da alteração de um
registro:

Para excluir um registro temos no evento CLick
do botão Excluir o código abaixo que usa o método Remove passando
o objeto usuario a ser excluído.
<strong>Protected Sub btnExcluir_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnExcluir.Click<br /><br /> Label1.Text = String.empty<br /><br /> Dim usuario As New Usuario<br /><br /> usuario.UsuarioId = Convert.ToInt32(txtId.Text)<br /><br /> repositorio = New UsuarioRepositorio()<br /><br /> repositorio.Remove(usuario)<br /><br /> Label1.Text = "usuário excluído com sucesso."<br /><br /> carregaUsuarios()<br /><br /> End Sub</strong>A exclusão do registro é mostrada na figura a
seguir: (Podemos melhorar incluindo uma mensagem solicitando a confirmação da
exclusão)

O código do botão Limpar é dado a seguir e apenas
limpa o conteúdo dos controles da página. Ele é usado para incluir um novo
usuário e para limpar os controles:
<strong>Protected Sub btnLimpar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnLimpar.Click<br /><br /> txtId.Text="NOVO" <br /><br /> txtNome.Text=""<br /><br /> txtLogin.Text=""<br /><br /> txtSenha.Text=""<br /><br /> txtPerfil.Text=""<br /><br /> txtEmail.Text = ""<br /><br /> txtNome.Focus()<br /><br /> End Sub</strong>Dessa forma encerramos a série de três artigos onde
mostramos como usar o NHibernate para realizar as operações CRUD de uma
maneira mais consistente usando a sessão NHibernate de uma forma otimizado.
Podemos melhorar ainda mais criando mais recursos
em nosso projeto mas isso é assunto para outro artigo. Aguardem!
Enquanto isso, pegue o projeto completo aqui: NHibernateASPNET.zip (Sem as referência ao
NHibernate) e baixe os três artigos condensados no formato PDF: NHibernate_ASPNETPDF.zip
Eu sei é apenas NHibernate mas eu gosto…








