Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Dúvida execicio 14.CRUD com Entity Framework

Fiz o filtro do mesmo jeito da aula,coloquei os savechanges, e aparentemente não esta gravando no banco .Esta até listando , mas gravando não.

Código do meu filtro:

 public class SaveChangesFilter : System.Web.Mvc.ActionFilterAttribute
    {
        private EntidadesContext contexto;
        public SaveChangesFilter(EntidadesContext contexto)
        {
            this.contexto = contexto;
        }
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            this.contexto.SaveChanges();
            this.contexto.Dispose();
        }
        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            if (filterContext.Exception == null)
            {
                this.contexto.SaveChanges();
            }
            this.contexto.Dispose();
        }
    }

Código do meu Ninject

 private static void RegisterServices(IKernel kernel)
        {
            //instaciacao de filtro no contrutor
            kernel.Bind<EntidadesContext>().ToSelf().InRequestScope();

            //utillizacao de filtro para salvar Bd
            int ordemExecucao = 1;
            kernel.BindFilter<SaveChangesFilter>(FilterScope.Global, ordemExecucao);
        }
5 respostas

Oi Leonardo

Você pode postar também o código do DAO que você está utilizando para fazer a atualização no banco de dados? Para o código com o Ninject funcionar, precisamos utilizar o DbContext gerenciado pelo Ninject e para isso o DAO deve recebê-lo como dependência no construtor e não construí-lo em todos os métodos como estavamos fazendo.

using LojaWebEF.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace LojaWebEF.DAO
{
    public class ProdutosDAO
    {
        private EntidadesContext contexto;

        public ProdutosDAO()
        {
            this.contexto = new EntidadesContext();
        }

        public void Adiciona(Produto produto)
        {
            contexto.Produtos.Add(produto);
           // contexto.SaveChanges();
        }

        public void Remove(Produto produto)
        {
            contexto.Produtos.Remove(produto);
            //contexto.SaveChanges();
        }

        public void Atualiza(Produto produto)
        {
            contexto.Entry(produto).State = System.Data.EntityState.Modified;
            //contexto.SaveChanges();
        }

        public Produto BuscaPorId(int id)
        {

            return this.contexto.Produtos.Find(id);
        }

        public List<Produto> Lista()
        {
            List<Produto> objListaProduto = new List<Produto>();

            objListaProduto = (from i in contexto.Produtos.Include("Categoria") select i).ToList();


            return objListaProduto;
        }

        public List<Produto> ProdutosComPrecoMaiorDoQue(decimal? preco)
        {
            decimal precoMinimo = preco.GetValueOrDefault(0);
            var busca = (from i in contexto.Produtos where i.Preco > precoMinimo select i).ToList();
            return busca;
        }

        public IEnumerable<Produto> ProdutosDaCategoria(string nomeCategoria)
        {
            var busca = (from i in contexto.Produtos where i.Categoria.Nome == nomeCategoria select i).ToList();
            return busca;
        }

        public IEnumerable<Produto> ProdutosDaCategoriaComPrecoMaiorDoQue(decimal? preco, string nomeCategoria)
        {
            decimal precoMinimo = preco.GetValueOrDefault(0);
            var busca = (from i in contexto.Produtos where i.Categoria.Nome == nomeCategoria && i.Preco == precoMinimo select i).ToList();
            return busca;
        }

        public IEnumerable<Produto> ListaPaginada(int paginaAtual)
        {
            var busca = (from i in contexto.Produtos.Include("Categoria") orderby i.Nome select i).ToList();
            int resultadoPoPagina = 5;
            busca = busca.Skip(resultadoPoPagina * (paginaAtual - 1)).ToList();
            busca = busca.Take(resultadoPoPagina).ToList();
            return busca;
        }

        public IEnumerable<Produto> BuscaPorPrecoCategoriaENome(decimal? preco, string nomeCategoria, string nome)
        {
            decimal precoMinimo = preco.GetValueOrDefault(0);

            var busca = contexto.Produtos.AsQueryable();

            if (!string.IsNullOrEmpty(nome))
            {
                busca = busca.Where(p => p.Nome == nome);

            }
            if (!string.IsNullOrEmpty(nomeCategoria))
            {
                busca = busca.Where(p => p.Categoria.Nome == nomeCategoria);

            }
            if (precoMinimo > 0)
            {
                busca = busca.Where(p => p.Preco > precoMinimo);


            }

            return busca.ToList();
        }
    }
}
solução!

Olá Leonardo

Veja que no código do seu DAO você está instanciando o EntidadesContext, então esse contexto não é o mesmo que está sendo gerenciado pelo Ninject.

public ProdutosDAO () 
{
   this.contexto = new EntidadesContext();
}

Para fazer o código funcionar, você precisa fazer com que o construtor da classe receba um argumento do tipo EntidadesContext:

public ProdutosDAO (EntidadesContext context) 
{
   this.contexto = context;
}

Cara o meu problema também esta no mesmo caso da injeção de dependência... esta parte eu n consegui implementar.

Olá Rodrigo

Essa pergunta já é meio antiga e provavelmente vai ser fechada em breve pois o autor não está mais respondendo. Você poderia abrir uma nova pergunta postando o código dos seus DAOs, e do NinjectWebCommon?