Olá, estou recebendo o seguinte erro ao tentar cadastrar um novo produto:
´´´
Erro de Servidor no Aplicativo '/'.
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.
Detalhes da Exceção: System.ObjectDisposedException: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
Erro de Origem:
Linha 20:
@produto.Preco Linha 21: Linha 22: @if(produto.Categoria != null) { Linha 23: @produto.Categoria.Nome Linha 24: }Arquivo de Origem: c:\repos\Alura_EFWeb\LojaWebEF\LojaWebEF\Views\Shared_ListaProdutos.cshtml Linha: 22
´´´
Segue o código do DAO:
'''
using LojaWebEF.Entidades; using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Web;
namespace LojaWebEF.DAO { public class ProdutosDAO { private EntidadesContext _contexto;
public ProdutosDAO(EntidadesContext contexto) { this._contexto = contexto; }
public void Adiciona(Produto produto) { _contexto.Produtos.Add(produto); }
public void Remove(Produto produto) { _contexto.Produtos.Remove(produto); }
public void Atualiza(Produto produto) { _contexto.Entry(produto).State = EntityState.Modified; }
public Produto BuscaPorId(int id) { return _contexto.Produtos.Find(id); }
public IEnumerable Lista() { return _contexto.Produtos.ToList(); }
public IEnumerable ProdutosComPrecoMaiorDoQue(decimal? preco) { decimal minimo = preco.GetValueOrDefault(0);
var busca = from p in _contexto.Produtos where p.Preco > minimo select p; return busca.ToList(); }
public IEnumerable ProdutosDaCategoria(string nomeCategoria) { var busca = from p in _contexto.Produtos where p.Categoria.Nome == nomeCategoria select p; return busca.ToList(); }
public IEnumerable ProdutosDaCategoriaComPrecoMaiorDoQue(decimal? preco, string nomeCategoria) { return new List(); }
public IEnumerable ListaPaginada(int paginaAtual) { return new List(); }
public IEnumerable BuscaPorPrecoCategoriaENome(decimal? preco, string nomeCategoria, string nome) { return new List(); } } }
'''
Este é o código do ProdutosController:
''' using LojaWebEF.DAO; using LojaWebEF.Entidades; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc;
namespace LojaWebEF.Controllers { public class ProdutosController : Controller { private ProdutosDAO _dao;
public ProdutosController(ProdutosDAO dao) { _dao = dao; } // // GET: /Produtos/ public ActionResult Index() { IEnumerable produtos = _dao.Lista(); return View(produtos); }
public ActionResult Form() { return View(); }
public ActionResult Adiciona(Produto produto) { _dao.Adiciona(produto); return RedirectToAction("Index"); }
public ActionResult Remove(int id) { return RedirectToAction("Index"); }
public ActionResult Visualiza(int id) { Produto p = _dao.BuscaPorId(id); return View(p); }
public ActionResult Atualiza(Produto produto) { return RedirectToAction("Index"); }
public ActionResult ProdutosComPrecoMinimo(decimal? preco) { ViewBag.Preco = preco; IEnumerable produtos = _dao.ProdutosComPrecoMaiorDoQue(preco); return View(produtos); }
public ActionResult ProdutosDaCategoria(string nomeCategoria) { ViewBag.NomeCategoria = nomeCategoria; IEnumerable produtos = _dao.ProdutosDaCategoria(nomeCategoria); return View(produtos); }
public ActionResult ProdutosDaCategoriaComPrecoMinimo(decimal? preco, string nomeCategoria) { ViewBag.Preco = preco; ViewBag.NomeCategoria = nomeCategoria; IEnumerable produtos = new List(); return View(produtos); }
public ActionResult BuscaDinamica(decimal? preco, string nomeCategoria, string nome) { ViewBag.Preco = preco; ViewBag.Nome = nome; ViewBag.NomeCategoria = nomeCategoria;
IEnumerable produtos = new List(); return View(produtos); } public ActionResult ListaPaginada(int? pagina) { int paginaAtual = pagina.GetValueOrDefault(1); ViewBag.Pagina = paginaAtual; IEnumerable produtos = new List(); return View(produtos); } } }
'''