.NET

25 jul, 2016

ASP .NET MVC – CRUD com Fluent NHibernate – Parte 02

Publicidade

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 e realizar o CRUD em uma aplicação ASP .NET MVC.

Aprendizado

  • Realizar o CRUD em uma aplicação ASP .NET MVC  usando a linguagem C#.
  • Criar um banco de dados SQL Server 2012 Express.
  • Criar as entidades que fazem partem do modelo.
  • Realizar o mapeamento ORM usando o Fluent NHibernate.
  • Criar a classe NHibernateHelper e definir a SessionFactory.
  • Criar o controlador, definir os métodos e criar as views para realizar o CRUD.

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.

mvc_crudnhb1

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 e selecione Add View.

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

mvc_crudnhb2

Será criado 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:

mvc_crudnhb3

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 e selecione Add View.

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

mvc_crudnhb4

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

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

mvc_crudnhb5

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 e selecione Add View.

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

mvc_crudnhb6

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

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

mvc_crudnhb7

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

mvc_crudnhb8

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

Para editar informações de um aluno, 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) e selecione Add View.

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

mvc_crudnhb9

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

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

mvc_crudnhb10

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);
            }
        }

Esse 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) e selecione Add View.

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

mvc_crudnhb11

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

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

mvc_crudnhb12

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).