A maior rede de estudos do Brasil

Grátis
14 pág.
Aula_17 12 18 (1)

Pré-visualização | Página 1 de 3

Treinamento em C# WebDeveloper
	
Aula
20
	
	Segunda-feira, 17 de Dezembro de 2018
	
	
	
Acesso a banco de dados com EntityFramework.
Desenvolvimento com Asp.Net WebApi
	
virtual
Permite que um método seja sobrescrito pelas 
subclasses que herdarem a classe principal.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Projeto.Repository.Context; //importando..
using System.Data.Entity; //importando..
namespace Projeto.Repository.Persistence
{
 public class BaseRepository<T>
 where T : class
 {
 public virtual void Inserir(T obj)
 {
 using (DataContext ctx = new DataContext())
 {
 ctx.Entry(obj).State = EntityState.Added; //insert
 ctx.SaveChanges(); //executando..
 }
 }
 public virtual void Atualizar(T obj)
 {
 using (DataContext ctx = new DataContext())
 {
 ctx.Entry(obj).State = EntityState.Modified; //update
 ctx.SaveChanges(); //executando..
 }
 }
 public virtual void Excluir(T obj)
 {
 using (DataContext ctx = new DataContext())
 {
 ctx.Entry(obj).State = EntityState.Deleted; //delete
 ctx.SaveChanges(); //executando..
 }
 }
 public virtual List<T> Consultar()
 {
 using (DataContext ctx = new DataContext())
 {
 return ctx.Set<T>().ToList();
 }
 }
 public virtual T ConsultarPorId(int id)
 {
 using (DataContext ctx = new DataContext())
 {
 return ctx.Set<T>().Find(id);
 }
 }
 }
}
Realizando uma sobrescrita do método 
"Consultar()" na classe ProdutoRepository
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using Projeto.Entities;
using Projeto.Repository.Context;
namespace Projeto.Repository.Persistence
{
 public class ProdutoRepository
 : BaseRepository<Produto>
 {
 //sobrescrita do método Consultar()
 public override List<Produto> Consultar()
 {
 using (DataContext ctx = new DataContext())
 {
 return ctx.Produto
 .Include(p => p.Estoque) //JOIN..
 .ToList();
 }
 }
 }
}
Realizando uma sobrescrita do método 
"ConsultarPorId()" na classe ProdutoRepository
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using Projeto.Entities;
using Projeto.Repository.Context;
namespace Projeto.Repository.Persistence
{
 public class ProdutoRepository
 : BaseRepository<Produto>
 {
 //sobrescrita do método Consultar()
 public override List<Produto> Consultar()
 {
 using (DataContext ctx = new DataContext())
 {
 return ctx.Produto
 .Include(p => p.Estoque) //JOIN..
 .ToList();
 }
 }
 //sobrescrita do método ConsultarPorId()
 public override Produto ConsultarPorId(int id)
 {
 using (DataContext ctx = new DataContext())
 {
 return ctx.Produto
 .Include(p => p.Estoque) //JOIN
 .FirstOrDefault(p => p.IdProduto == id);
 }
 }
 }
}
Modificando a classe de modelo 
de consulta de produtos:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Projeto.Presentation.Models
{
 public class ProdutoConsultaModel
 {
 public int IdProduto { get; set; }
 public string Nome { get; set; }
 public decimal Preco { get; set; }
 public int Quantidade { get; set; }
 public int IdEstoque { get; set; }
 //Relacionamento..
 public EstoqueConsultaModel Estoque { get; set; }
 }
}
/ProdutoController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Projeto.Presentation.Models;
using Projeto.Business;
using Projeto.Entities;
using Projeto.Presentation.Utils;
namespace Projeto.Presentation.Controllers
{
 [RoutePrefix("api/produto")]
 public class ProdutoController : ApiController
 {
 [HttpPost] //verbo HTTP POST
 [Route("cadastrar")] //ENDPOINT -> /api/produto/cadastrar
 public HttpResponseMessage Cadastrar(ProdutoCadastroModel model)
 {
 //verificar se os dados da model passaram nas validações
 if (ModelState.IsValid)
 {
 try
 {
 Produto produto = new Produto();
 produto.Nome = model.Nome;
 produto.Preco = model.Preco;
 produto.Quantidade = model.Quantidade;
 produto.IdEstoque = model.IdEstoque;
 ProdutoBusiness business = new ProdutoBusiness();
 business.Cadastrar(produto);
 return Request.CreateResponse(HttpStatusCode.OK,
 "Produto cadastrado com sucesso.");
 }
 catch (Exception e)
 {
 return Request.CreateResponse
					 (HttpStatusCode.InternalServerError,
 "Erro: " + e.Message);
 }
 }
 else
 {
 var erros = ValidationUtil.ObterErros(ModelState);
 return Request.CreateResponse(HttpStatusCode.BadRequest, erros);
 }
 }
 [HttpPut] //verbo HTTP PUT
 [Route("atualizar")] //ENDPOINT -> /api/produto/atualizar
 public HttpResponseMessage Atualizar(ProdutoEdicaoModel model)
 {
 //verificar se os dados da model passaram nas validações
 if (ModelState.IsValid)
 {
 try
 {
 Produto produto = new Produto();
 produto.IdProduto = model.IdProduto;
 produto.Nome = model.Nome;
 produto.Preco = model.Preco;
 produto.Quantidade = model.Quantidade;
 produto.IdEstoque = model.IdEstoque;
 ProdutoBusiness business = new ProdutoBusiness();
 business.Atualizar(produto);
 return Request.CreateResponse(HttpStatusCode.OK,
 "Produto atualizado com sucesso.");
 }
 catch (Exception e)
 {
 return Request.CreateResponse
					 (HttpStatusCode.InternalServerError,
 "Erro: " + e.Message);
 }
 }
 else
 {
 var erros = ValidationUtil.ObterErros(ModelState);
 return Request.CreateResponse(HttpStatusCode.BadRequest, erros);
 }
 }
 [HttpDelete] //verbo HTTP DELETE
 [Route("excluir")] //ENDPOINT -> /api/produto/excluir
 public HttpResponseMessage Excluir(int id)
 {
 try
 {
 ProdutoBusiness business = new ProdutoBusiness();
 Produto produto = business.ConsultarPorId(id);
 //excluindo..
 business.Excluir(produto);
 return Request.CreateResponse(HttpStatusCode.OK,
 "Produto excluido com sucesso.");
 }
 catch (Exception e)
 {
 return Request.CreateResponse(HttpStatusCode.InternalServerError,
 "Erro: " + e.Message);