Entity
Framework - Construindo um mecanismo de consulta
![]() |
Neste artigo vou mostrar como podemos implementar um mecanismo de consulta a dados usando o Entity Framework em uma aplicação ASP .NET MVC. |
Consultar dados é uma das funcionalidades mais básicas que uma aplicação pode possuir. Na verdade a consulta aos dados, usando critérios dos mais variados tipos, pode ser a funcionalidade sobre a qual o restante de uma aplicação se baseia para funcionar corretamente.
Neste artigo eu mostro como criar uma página de consulta em uma aplicação ASP .NET MVC 5 usando os recursos do Entity Framework 6 e do pacote PagedList.Mvc para realizar a paginação.
Para tornar a tarefa mais simples eu vou utilizar o banco de dados Cadastro.mdf criado no SQL Server 2012 Express e a tabela Produtos que possui a seguinte estrutura:
![]() |
Recursos usados:
Criando o projeto no Visual Studio 2013 Express
Abra o VS Express 2013 for Web e clique em New Project;
A seguir selecione a linguagem Visual C# e o template ASP .NET Web Application;
Informe o nome Mvc_Consultas e clique no botão OK;
![]() |
A seguir selecione o template Empty e clique no botão OK;
![]() |
Referenciando o PagedList.Mvc
Vamos agora incluir no projeto o pacote PagedList.Mvc.
Clique no menu TOOLS e a seguir em Library Package Manager -> Manage Nuget Packages for Solution;
Digite PagedList na caixa de busca e selecione o item PagedList.Mvc e clique em Install;
![]() |
Criando um Entity Data Model e o ProdutoModel
Vamos agora criar uma mapeamento ORM usando o Entity Framework através da geração de um entity data model.
Selecione a pasta Models e no menu PROJECT clique em Add New Item;
A seguir e selecione a guia Data e clique ADO .NET Entity Data Model;
Informe o nome Cadastro.edmx e clique no botão Add;
A seguir selecione Generate from database em clique em Next>;
Clique em Next> novamente e a seguir selecione a tabela Produtos do banco de dados Cadastro marcando as opções conforme figura abaixo:
![]() |
Será criado a entidade Produto conforme mostra a figura a seguir:
![]() |
Agora clique com o botão direito sobre a pasta Models e a seguir em Add -> Class;
Informe o nome ProdutoModel e digite o código abaixo nesta classe:
using PagedList;
using System.ComponentModel.DataAnnotations;
namespace Mvc_Consultas.Models
{
public class ProdutoModel
{
public int? Pagina { get; set; }
[Display(Name = "Produto")]
public string Nome { get; set; }
public decimal? Preco { get; set; }
public IPagedList<Produto> ProcuraResultados { get; set; }
public string BotaoProcurar { get; set; }
}
}
|
Definindo o Controller
Vamos agora definir o nosso controlador chamado ProdutoController.
Clique com o botão direito na pasta Controllers e a seguir em Add -> Controller;
Selecione a opção MVC 5 Controller - Empty e clique no botão Add;
![]() |
Informe o nome ProdutoController e clique no botão Add;
![]() |
Na Action Index do controller criado vamos definir o código que retorna uma lista de clientes:
using System.Linq;
using System.Web.Mvc;
using Mvc_Consultas.Models;
using PagedList;
namespace Mvc_Consultas.Controllers
{
public class ProdutoController : Controller
{
const int RegistrosPorPagina = 5;
//
// GET: /Produto/
public ActionResult Index(ProdutoModel model)
{
if (!string.IsNullOrEmpty(model.BotaoProcurar) || model.Pagina.HasValue)
{
var entities = new CadastroEntities();
var results = entities.Produtos
.Where(p => (p.Nome.StartsWith(model.Nome) || model.Nome == null) && (p.Preco > model.Preco || model.Preco == null))
.OrderBy(p => p.Nome);
var pageIndex = model.Pagina ?? 1;
model.ProcuraResultados = results.ToPagedList(pageIndex, RegistrosPorPagina );
}
return View(model);
}
}
}
|
Agora vamos criar uma view para exibir esta Action.
Clique com o botão direito do mouse sobre no interior da View Index e a seguir em Add View;
A seguir crie uma view Empty e a seguir defina o código a seguir nesta view:
@model Mvc_Consultas.Models.ProdutoModel
@{
ViewBag.Title = "Index";
}
@using PagedList.Mvc;
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("Index", "Produto", FormMethod.Get))
{
@Html.ValidationSummary(false)
<div style="border-bottom:1px solid #bbb"><h1>Procurar Produto</h1></div>
<table style="border:0px; width:500px;">
<tr>
<td>
<div class="editor-label">
@Html.LabelFor(model => model.Nome)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Nome)
@Html.ValidationMessageFor(model => model.Nome)
</div>
</td>
<td>
<div class="editor-label">
@Html.LabelFor(model => model.Preco)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Preco)
@Html.ValidationMessageFor(model => model.Preco)
</div>
</td>
<td style="vertical-align:bottom;">
<input name="BotaoProcurar" type="submit" value="Procurar" />
</td>
</tr>
</table>
if (Model.ProcuraResultados != null && Model.ProcuraResultados.Count > 0)
{
<table class="table" style=" width:500px;">
<tr>
<th>ID</th>
<th>Produto</th>
<th>Qtde</th>
<th>Preco</th>
</tr>
@foreach (var product in Model.ProcuraResultados)
{
<tr>
<td>@product.Id</td>
<td>@product.Nome</td>
<td>@product.Quantidade</td>
<td>@product.Preco</td>
</tr>
}
</table>
@Html.PagedListPager(Model.ProcuraResultados,page => Url.Action("Index", new RouteValueDictionary()
{
{ "Pagina", page },
{ "Nome", Model.Nome },
{ "Preco", Model.Preco }
}),
PagedListRenderOptions.PageNumbersOnly)
}
}
|
Executando o projeto e realizando algumas consultas usando o nome do produto ou o seu preço teremos:
![]() |
Eu não me preocupei em aplicar nenhum estilo na página mas você pode incrementar o projeto usando o seu talento.
Pegue o projeto
completo aqui: Mvc_Consultas.zip
(sem as referências)
João 6:51 Eu sou o pão vivo (Jesus) que desceu do céu; se alguém comer deste pão, viverá para sempre; e o pão que eu darei pela vida do mundo é a minha carne.
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 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências: