![]() |
Neste artigo vou mostrar como realizar o CRUD básico com Entity Framework, e o padrão repositório, usando o WebGrid e o BootStrap em uma aplicação ASP .NET MVC |
![]() |
Eu já escrevi alguns artigos apresentando e usando o WebGrid em aplicações ASP .NET MVC e este artigo é uma revisão do assunto, agora usando a ASP .NET MVC 5 e o BootStrap.
Veja as referências para saber mais sobre o WebGrid , o padrão repositório, o Entity Framework e sobre o BootStrap.
Recursos usados
Linguagem C#
ASP .NET MVC 5
WebGrid
EntityFramework
Criando o projeto no VS Community
Abra o VS Community 2015 e clique em New Project;
A seguir selecione Visual C# -> Web -> ASP .NET Web Application;
Informe o nome Mvc_Crud_EF_WebGrid e clique no botão OK;
Selecione o template Empty e marque a opção MVC, sem autenticação, conforme figura a seguir:
Será criada uma solução com estrutura exibida abaixo:
Definindo o modelo de dados na pasta Models
Vamos definir o nosso modelo de dados na pasta Models usando o Entity Data Model e a abordagem Database First.
Aqui você pode usar qualquer banco de dados e qualquer tabela. Para o exemplo eu estou usando uma tabela chamada Usuarios criada em um banco SQL Server chamado Cadastro.mdf.
A estrutura da tabela Usuarios é a seguinte:
![]() |
Clique com o botão direito do mouse sobre a pasta Models e a seguir clique em Add-> New Item;
Selecione a guia Data, selecione ADO .NET Entity Data Model e informe o nome CadastroModel e clique em Add;
No assistente Entity Data Model Wizard selecione EF Designer from database e clique em Next>;
Selecione a conexão com o banco de dados de sua escolha, no meu caso Cadastro.mdf, e clique em Next>;
Selecione a tabela Usuarios, marque as opções conforme a figura abaixo e clique no botão Finish;
![]() |
Assim teremos o nosso modelo de entidades mapeado para a tabela Usuarios.
Usando o padrão repositório
Vamos agora definir o nosso repositório onde iremos centralizar o acesso aos dados.
Primeiro vamos criar a interface IUsuarioRepositorio que define o contrato para implementação dos métodos que vamos usar em nosso projeto.
using System.Collections.Generic;
namespace Mvc_Crud_EF_WebGrid.Models
{
public interface IUsuarioRepositorio
{
IEnumerable<Usuario> GetUsuarioDetalhes();
Usuario GetUsuarioPorID(int usuarioId);
void AdicionaUsuario(Usuario usuario);
void DeletaUsuario(int usuarioId);
void AtualizaUsuario(Usuario usuario);
Usuario Detalhes(int usuarioId);
}
}
|
A seguir vamos implementar essa interface na classe concreta UsuarioRepositorio :
using System;
using System.Collections.Generic;
using System.Linq;
namespace Mvc_Crud_EF_WebGrid.Models
{
public class UsuarioRepositorio : IUsuarioRepositorio
{
CadastroEntities db = new CadastroEntities();
public UsuarioRepositorio()
{
this.db = new CadastroEntities();
}
public UsuarioRepositorio(CadastroEntities ctx)
{
this.db = ctx;
}
public void AdicionaUsuario(Usuario usuario)
{
try
{
db.Usuarios.Add(usuario);
db.SaveChanges();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (db != null)
{
db.Dispose();
}
}
}
public void AtualizaUsuario(Usuario usuario)
{
try
{
var novoUsuario = db.Usuarios.Where(x => x.usuarioId == usuario.usuarioId).FirstOrDefault();
novoUsuario.usuarioNome = usuario.usuarioNome;
novoUsuario.usuarioEmail = usuario.usuarioEmail;
novoUsuario.usuarioSenha = usuario.usuarioSenha;
db.SaveChanges();
novoUsuario = null;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (db != null)
{
db.Dispose();
}
}
}
public void DeletaUsuario(int usuarioId)
{
try
{
Usuario _usuario = db.Usuarios.SingleOrDefault(x => x.usuarioId == usuarioId);
db.Usuarios.Remove(_usuario);
db.SaveChanges();
_usuario = null;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (db != null)
{
db.Dispose();
}
}
}
public Usuario Detalhes(int usuarioId)
{
try
{
dynamic obj = new Usuario();
obj = db.Usuarios.SingleOrDefault(s => s.usuarioId == usuarioId);
return obj;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (db != null)
{
db.Dispose();
}
}
}
public IEnumerable<Usuario> GetUsuarioDetalhes()
{
try
{
return db.Usuarios.ToList();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (db != null)
{
db.Dispose();
}
}
}
public Usuario GetUsuarioPorID(int usuarioId)
{
try
{
return db.Usuarios.SingleOrDefault(x => x.usuarioId == usuarioId);
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (db != null)
{
db.Dispose();
}
}
}
}
}
|
Embora o código pareça extenso ele é muito simples. Basicamente estamos criando uma instância do nosso contexto representando pela classe CadastroEntities e usando os recursos do Entity Framework para realizar as operações de manutenção na tabela Usuarios.
Criando o controlador UsuarioController
Clique com o botão direito do mouse sobre a pasta Controllers;
A seguir clique em Add -> Controller e selecione MVC5 Controller Empty e clique no botão Add;
Informe o nome UsuarioController e clique no botão Add;
O controlador será criado com o método Action Index() que irá tratar a requisição GET.
Inclua o código abaixo no controlador UsuarioController :
using System.Linq;
using System.Web.Mvc;
using Mvc_Crud_EF_WebGrid.Models;
namespace Mvc_Crud_EF_WebGrid.Controllers
{
public class UsuarioController : Controller
{
private IUsuarioRepositorio rep = null;
public UsuarioController()
{
this.rep = new UsuarioRepositorio();
}
public UsuarioController(IUsuarioRepositorio repositorio)
{
this.rep = repositorio;
}
// GET: Usuario
public ActionResult Index()
{
var listaUsuario = from usuario in rep.GetUsuarioDetalhes() select usuario;
return View(listaUsuario);
}
public ActionResult AdicionarUsuario()
{
return View();
}
[HttpPost]
public ActionResult AdicionarUsuario(Usuario usuario)
{
rep.AdicionaUsuario(usuario);
return RedirectToAction("Index");
}
public ActionResult EditarUsuario(int id = 0)
{
Usuario usuario = rep.GetUsuarioPorID(id);
if (usuario == null)
{
return HttpNotFound();
}
return View(usuario);
}
[HttpPost]
public ActionResult EditarUsuario(Usuario usuario)
{
rep.AtualizaUsuario(usuario);
return RedirectToAction("Index");
}
public ActionResult DeletarUsuario(int id = 0)
{
Usuario usuario = rep.GetUsuarioPorID(id);
if (usuario == null)
{
return HttpNotFound();
}
return View(usuario);
}
[HttpPost]
public ActionResult DeletarUsuario(Usuario usuario)
{
rep.DeletaUsuario(usuario.usuarioId);
return RedirectToAction("Index");
}
public ActionResult Detalhes(int id = 0)
{
Usuario usuario = rep.Detalhes(id);
return View(usuario);
}
}
}
|
No código acima estamos usando o repositório criado para realizar as operações de manutenção de dados. Assim desacoplamos nosso acesso aos dados do Entity Framework.
Criando o arquivo de estilo que iremos aplicar no WebGrid
Clique com o botão direito do mouse sobre a pasta Content e a seguir em Add-> New Item;
Na guia Web selecione o template Style Sheet e informe o nome EstiloMac.css (ou outro de sua escolha);
A seguir inclua o código abaixo:
.webGrid
{
margin: 4px;
border-collapse: collapse;
width: 700px;
font-family: Tahoma;
}
.grid-header
{
background-color: #990000;
font-weight: bold;
color: White !important;
}
.webGrid th a
{
color: White;
text-decoration: none;
}
.webGrid th, .webGrid td
{
border: 1px solid black;
padding: 5px;
}
.alt
{
background-color: #F4EFEF;
}
.webGrid th a:hover
{
text-decoration: underline;
}
.to-the-right
{
text-align: right;
}
|
Criando a View Index
Vamos criar agora a view Index onde vamos definir as configurações do WebGrid.
Clique com o botão direito do mouse sobre o método Action Index e a seguir em Add View;
Aceite o nome Index e selecione o template : Empty, selecione o model Class Usuario e o Data Context CadastroEntities e clique no botão Add.
Será criado o arquivo Index.cshtml no interior da pasta /Views/Home.
Como marcamos a opção - Use a layout page - será instalado e referenciado o BootStrap na página _Layout.cshtml dentro da pasta /Views/Shared.
Vamos abrir o arquivo _Layout.cshtml e incluir uma referência ao arquivo de estilo EstiloMac.css que criamos.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - Macoratti .net</title>
<link href="~/Content/Site.css" rel="stylesheet" type="text/css" />
<link href="~/Content/EstiloMac.css" rel="stylesheet" />
<link href="~/Content/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="~/Scripts/modernizr-2.6.2.js"></script>
</head>
<body>
...
...
...
|
A seguir inclua o código abaixo no arquivo Index.cshtml:
@model IEnumerable<Mvc_Crud_EF_WebGrid.Models.Usuario>
@{
ViewBag.Title = "Index";
var grid = new WebGrid(source: Model, canPage: true, defaultSort: "User_Id", rowsPerPage: 5, canSort: true);
}
<br />
<p>
@Html.ActionLink("Novo Usuario", "AdicionarUsuario", null, new { @class = "btn btn-primary" })
</p>
@grid.GetHtml(
tableStyle: "webGrid",
htmlAttributes: new { id = "checkableGrid" },
fillEmptyRows: true,
alternatingRowStyle: "alt",
headerStyle: "grid-header",
footerStyle: "foot-grid",
mode: WebGridPagerModes.All,
firstText: "<< Primeiro",
previousText: " < Anterior",
nextText: "Próximo >",
lastText: "Último >>",
caption: "Detalhes do Usuário",
emptyRowCellValue: null,
columns: new[]{
grid.Column("usuarioId",header:"ID",style:"text-align-left"),
grid.Column("usuarioNome",header:"Nome"),
grid.Column("usuarioEmail",header:"Email"),
grid.Column("usuarioSenha",header:"Senha"),
grid.Column("",header: "Ações",format: @<text>@Html.ActionLink("Editar", "EditarUsuario", new { id = item.usuarioId })
|
@Html.ActionLink("Deletar", "DeletarUsuario", new { id = item.usuarioId })
|
@Html.ActionLink("Detalhes", "Detalhes", new { id = item.usuarioId })
</text>
)
}
)
|
O código acima define as configurações do WebGrid, usa alguns recursos do BootStrap e vincula os dados do modelo Usuario ao grid para exibição.
Se executarmos agora nosso projeto iremos obter o seguinte resultado :
![]() |
Naturalmente falta implementar os métodos para realizar as operações de inclusão, edição, exclusão e exibição de detalhes do usuário.
Aguarde a segunda parte do artigo onde iremos implementar essas funcionalidades.
"Porque pela graça sois salvos, por meio
da fé; e isto não vem de vós, é dom de Deus.
Não vem das obras, para que ninguém se glorie;"
Efésios 2:8,9
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a
Objetos com VB .NET
Padrões de Projeto - O modelo MVC - Model View ... - Macoratti.
ASP .NET MVC 3 - Usando o HTML Helper WebGrid - Macoratti.net
ASP .NET MVC - Um simples CRUD usando WebGrid ... - Macoratti.net
ASP .NET MVC 3 - Usando o HTML Helper WebGrid - Macoratti.net
EF 6 - Aplicação em Camadas - Usando o padrão Repository ...
ASP .NET MVC - CRUD Usando o padrão Repository - Macoratti.net
Entity Framework 6 - Aplicação em camadas ... - Macoratti.net
C# - Cadastro de Clientes com Entity Framework em ... - Macoratti.net