MVC e Entity Framework Parte 2
Caro(a) Leitor(a), gostaria de informar que este artigo é uma continuação da parte 1 publicado anteriormente no link abaixo. Antes de começar a ler este artigo, comece pela parte 1.
Link: http://ecode10.com/artigo/1657/MVC-e-Entity-Framework-Parte-1
O que falei na parte 1 não vou repetir nesta parte 2, vou continuar o passo a passo. bem simples. Na parte 1 nós falamos do banco de dados pronto e da string de conexão.
Ferramenta: Visual Studio 2012
Plataforma: Web MVC
Linguagem: C#
Banco de dados: SQL Server 2008
Criamos uma classe de contexto chamada iSACContext.cs herdando de DbContext. Criamos uma classe que é exatamente a tabela do banco de dados, ou seja, possui os mesmos atributos.
É uma tabela simples chamada Sites, ela possui os atributos CHSite, NOSite e SITSite, a chave primária, nome do site e situação do site. Essa classe Site.cs foi criada na pasta Models do projeto. Esse é o primeiro passo que precisa ser feito depois da conexão com o banco de dados. Listagem 1.
Listagem 1 - Classe Site.cs dentro da pasta Models
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace MVCSAC.Models
{
public class Site
{
[Key]
public int CHSite { get; set; }
[Required(ErrorMessage=("Digite o nome do site."))]
[Display(Name="Nome do Site")]
public string NOSite { get; set; }
[Required(ErrorMessage=("Digite a situação"))]
[Display(Name="Situação")]
public string SITSite { get; set; }
}
}
Depois da “Model” criada, passamos para a “Controller”. A “Controller” fica em outra pasta chamada “Controllers” no plural. A classe deve ser ser chamada com o mesmo prefixo e a palavra “controller”, por exemplo: SiteController.cs.
Para criar, basta clicar com o botão direito em cima da pasta, escolha a opção “Add” e depois “Controller”. Figura 1.
Figura 1 - Criando “Controller”
Clicando na opção “Controller”, aparece outra tela para colocar o nome e escolher o tipo de “template” apropriado. Lembrando que neste primeiro momento, escolheremos uma opção simples e vazia “empty”. Imagem 2.
Figura 2 - Colocando o nome no “Controller” e escolhendo “template”
Note que na figura 2, é colocado o nome como “SiteController” e o “template” escolhido como MVC controller with empty read/write actions. Depois disso clique no botão Add.
Dentro desse “Controller” são criados métodos específicos do MVC. Por exemplo, o método chamado “Index” é acionado quando alguém entra na primeira página. Toda vez que alguém digitar o endereço http://localhost:8080/MVC/Site o primeiro método que o código vai passar é o “Index”.
Se você precisa preencher alguma “dropboxlist” ou qualquer outro objeto, preencha-o dentro do método “Index”. Continuando o exemplo aqui, para preencher uma lista, busquei diretamente do banco de dados.
Antes criei uma instância da classe de contexto falada na primeira parte de outro artigo, a parte 1. Listagem 2.
Listagem 2 - Gerando instância e mostrando Index.
public class SiteController : Controller
{
iSACContext db = new iSACContext();
//
// GET: /Site/
public ActionResult Index()
{
var site = db.Sites.ToList();
return View(site);
}
}
Veja que antes da classe Index(), adicionei a linha iSACContext db = new iSACContext(). Essa linha significa que a classe está preparada para buscar as informações dentro do banco de dados.
A variável “db” pode ser usada na classe toda. Posso usá-la pra tudo. Passando agora para classe “Index”, eu escrevi duas linhas. A primeira para buscar uma lista de coisas e a outra para mostrar os dados na página.
Quando crio o “var site = db.” e adiciono o ponto final, aparece todas as classe disponíveis para acesso ao banco de dados. Figura 3.
Figura 3 - Clicando o ponto e aparecendo classes.
Todas as classes que aparecem (mostradas na figura 3) estão disponíveis para o uso direto com o banco de dados. A classe Sites funciona como se fosse uma tabela no SQL Server.
Note também que estas classes são as mesmas criadas dentro da pasta “Models” e referencias como tabelas na classe de contexto. Listagem 3.
Listagem 3 - Classe de Contexto
public class iSACContext : DbContext
{
//Tabelas
public DbSet<Site> Sites { get; set; }
public DbSet<Usuario> Usuarios { get; set; }
public DbSet<Chamado> Chamados { get; set; }
public DbSet<Resposta> Respostas { get; set; }
}
A listagem 3 mostra as variáveis de contexto, isto é, aquelas ligadas ao meu banco de dados SQL Server 2008.
Continuando com o método “Index”, a variável criada chamada “sites” retorna a uma lista de dados (se houver dados na tabela), ou seja, na parte da “View”. Por isso o return View(sites);.
Com MVC, daqui pra frente tudo funciona com “View”. No nosso caso CSHTML. Depois da classe “Index”, precisamos gerar a parte do HTML, aquela parte onde mostra para o usuário o resultado final.
Para revisar, até agora fizemos a parte de banco de dados na classe de contexto, depois criamos as “models”, agora a “controller” e classe “Index”. Nenhuma delas é a parte de HTML.
No modo MVC, a parte HTML virou CSHTML. Para gerar a parte do usuário, basta clicar em cima do método “Index” localizado dentro da pasta “Controllers”. A figura 4 mostra como funciona.
Figura 4 - Gerando View
Escolhendo “Add View”, uma nova tela aparece com algumas opções. Hoje temos dois tipos de “engine”, a primeira ASPX (C#), aquela que já conhecemos e a outra chamada “Razor” (CSHTML).
Não vou explicar agora a diferença entre as duas opções, mas vou escolher a opção nova chamada “Razor”. O próximo passo é criar um tipo forte para a View, ou seja, basta indicar a classe “model” chamada “Site” criada dentro da pasta “Models”.
Existe ainda um “template” pra ser escolhido, no nosso caso será uma lista, ou List. Veja a figura 5.
Figura 5 - Adicionando informações para gerar a View
Note que a parte de “Use a layout or master page” está marcada e em branco. Deixe em branco mesmo, depois retornaremos nesse assunto. Depois de selecionado, basta clicar no botão “Add”.
O Visual Studio 2012 cria uma pasta dentro da pasta “Views” do seu projeto e o nome da pasta é Site. Dentro da pasta um arquivo é criado chamado “Index.cshtml”, ou seja, o mesmo nome da classe criada.
A ferramenta gera tudo pra você num piscar de olhos. A listagem 4 mostra como ficou a página “Index.cshtml”.
Listagem 4 - Index.cshtml criado pela ferramenta
@model IEnumerable
@{
ViewBag.Title = "Index";
}
<h2>Indexh2>
<p>
@Html.ActionLink("Create New", "Create")
p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.NOSite)
th>
<th>
@Html.DisplayNameFor(model => model.SITSite)
th>
<th>th>
tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.NOSite)
td>
<td>
@Html.DisplayFor(modelItem => item.SITSite)
td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.CHSite }) |
@Html.ActionLink("Details", "Details", new { id=item.CHSite }) |
@Html.ActionLink("Delete", "Delete", new { id=item.CHSite })
td>
tr>
}
table>
Note que a primeira linha indica a “Model” criada anteriormente. Depois uma tabela normal, lá no final um “foreach” buscando a lista da “model” e mostrando os campos retornados do banco de dados.
Vamos ver o resultado final? Segue a figura 6 mostrando o que apareceu na tela.
Figura 6 - Resultado final
Note que no endereço da URL está o caminho /Site. A lista de informações foram mostradas e existe só um dado dentro da tabela. Fico por aqui e em breve publico mais artigos falando sobre MVC.
Qualquer dúvida, pode entrar em contato pelo site www.mauriciojunior.org.
Sign up to our newsletter
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.