ASP .NET MVC -  CRUD com Fluent NHibernate - II

 

 Neste artigo vou mostrar como realizar as operações CRUD em uma aplicação ASP .NET MVC usando o NHibernate e realizando o mapeamento com o Fluent NHibernate.

Na primeira parte do artigo criamos o projeto, definimos a fonte e o modelo de dados, realizamos o mapeamento usando o Fluent NHibernate e criamos a classe NHibernateHelper para realizar a conexão com o SQL Server.

Vamos agora definir o controlador e os métodos para realizar o CRUD no projeto ASP .NET MVC 5.

Recursos usados

Objetivos

  • Usar os recursos do NHibernate e Fluent NHibernate realizar o CRUD em uma aplicação ASP .NET MVC

Aprendizado

Definindo o controlador e realizando o CRUD

Agora resta criar o controlador na pasta Controllers e definir os métodos para realizar o CRUD.

Clique com o botão direito sobre a pasta Controllers e a seguir em Add -> Controller;

Selecione a opção MVC5 Controllers with read/write actions e clique em Add;

Informe o nome HomeController e clique no botão OK;

Teremos o controlador HomeController criado com o esqueleto dos métodos Index, Details, Create, Edit, Delete.  

Nossa próxima tarefa será definir cada um desses métodos. Vamos lá...

Após a criação de cada view eu vou fazer alguns ajustes traduzindo para o português alguns títulos e cabeçalhos.

Antes de iniciar vamos declarar os seguintes namespaces no controlador HomeController:

using NHibernate;
using
NHibernate.Linq;
using
System.Linq;
using
System.Web.Mvc;

1- Método Index - Exibir uma lista de alunos

Inclua o código abaixo no método Index() :

        public ActionResult Index()
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                var alunos = session.Query<Aluno>().ToList();
                return View(alunos);
            }
        }

Este método retorna uma lista de alunos a partir da tabela Alunos.

Para criar a respectiva view clique com o botão direito no interior do método selecione Add View;

Defina o template List e informe o Model class conforme a figura abaixo:

Será criada o arquivo Index.cshtml na pasta /Views/Home e o arquivo _Layout.cshtml  na pasta /Views/Shared.

Eu vou fazer alguns ajustes no arquivo de _Layout traduzindo alguns textos para o português.

Executando o projeto iremos obter o resultado abaixo para a view Index:

2- Método Details - Exibir detalhes de um aluno

Agora inclua o código abaixo no método Details:

        public ActionResult Details(int id)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                var aluno = session.Get<Aluno>(id);
                return View(aluno);
            }
        }

Este método obtém as informações de um aluno.

Para criar a respectiva view clique com o botão direito no interior do método selecione Add View;

Defina o template Details e informe o Model class conforme a figura abaixo:

Será criada o arquivo Details.cshtml na pasta /Views/Home.

Executando o projeto iremos obter o resultado abaixo para a view Details:

3- Método Create - Incluir um novo Aluno

O método Create possui o GET e o POST.

Vamos incluir o código a seguir no método Create(POST):

        [HttpPost]
        public ActionResult Create(Aluno aluno)
        {
            try
            {
                using (ISession session = NHibernateHelper.OpenSession())
                {
                    using (ITransaction transaction = session.BeginTransaction())
                    {
                        session.Save(aluno);
                        transaction.Commit();
                    }
                }
                return RedirectToAction("Index");
            }
            catch 
            {
                return View();
            }
        }

Este método inclui um novo aluno na tabela Alunos.

Para criar a respectiva view clique com o botão direito no interior do método selecione Add View;

Defina o template Create e informe o Model class conforme a figura abaixo:

Será criada o arquivo Create.cshtml na pasta /Views/Home.

Executando o projeto iremos obter o resultado abaixo para a view Create:

Após informar os dados e clicar no botão Criar Aluno teremos o aluno exibido na view Index():

4- Método Edit - Editar dados de um aluno

Para editar informações de um alunos precisamos definir o método para o GET e para o POST.

1- No método Edit(GET) inclua o código abaixo:

       // GET: Home/Edit/5
        public ActionResult Edit(int id)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                var aluno = session.Get<Aluno>(id);
                return View(aluno);
            }
        }

Este método apresenta os dados que desejamos editar.

2- Após informar os dados a serem alterados precisamos definir o código do método Edit(POST) abaixo que irá submeter e salvar as alterações:

       // POST: Home/Edit/5
        [HttpPost]
        public ActionResult Edit(int id, Aluno aluno)
        {
            try
            {
                using (ISession session = NHibernateHelper.OpenSession())
                {
                    var alunoAlterado = session.Get<Aluno>(id);
                    alunoAlterado .Sexo = aluno.Sexo;
                    alunoAlterado .Curso = aluno.Curso;
                    alunoAlterado .Email = aluno.Email;
                    alunoAlterado .Nome = aluno.Nome;
                    using (ITransaction transaction = session.BeginTransaction())
                    {
                        session.Save(alunoAlterado);
                        transaction.Commit();
                    }
                }
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

Para criar a respectiva view clique com o botão direito no interior do método Edit(GET) selecione Add View;

Defina o template Edit e informe o Model class conforme a figura abaixo:

Será criada o arquivo Edit.cshtml na pasta /Views/Home.

Executando o projeto iremos obter o resultado abaixo para a view Edit:

Após realizar as alterações veremos os dados alterado na view Index().

5- Método Delete - Deletar dados de um aluno

O método Delete também possui o GET que apresenta o aluno ao usuário.

Neste método inclua o código a seguir:

        // GET: Home/Delete/5
        public ActionResult Delete(int id)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                var aluno = session.Get<Aluno>(id);
                return View(aluno);
            }
        }

Este código localiza o aluno pelo seu id e apresenta ao usuário para confirmar a exclusão.

Para excluir os dados temos que incluir o código abaixo no método Delete(POST) :

        // POST: Home/Delete/5
        [HttpPost]
        public ActionResult Delete(int id, Aluno aluno)
        {
            try
            {
                using (ISession session = NHibernateHelper.OpenSession())
                {
                    using (ITransaction transaction = session.BeginTransaction())
                    {
                        session.Delete(aluno);
                        transaction.Commit();
                    }
                }
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

Para criar a respectiva view clique com o botão direito no interior do método Delete(GET) selecione Add View;

Defina o template Delete e informe o Model class conforme a figura abaixo:

Será criada o arquivo Delete.cshtml na pasta /Views/Home.

Executando o projeto iremos obter o resultado abaixo para a view Delete:

Ao clicar no botão - Deletar aluno - o aluno será excluído da tabela Alunos.

Dessa forma acabamos de criar uma aplicação ASP .NET MVC realizando um CRUD básico com os recursos do NHibernate e Fluent NHibernate.

Pegue o projeto completo aqui :   Crud_FluentNHibernate.zip (sem as referências)

(Disse Jesus) - Em verdade, em verdade vos digo que vem a hora, e agora é, em que os mortos ouvirão a voz do Filho de Deus, e os que a ouvirem viverão.
João 5:25

Referências:


José Carlos Macoratti