Bom dia Victor,
ainda não consegui descobrir o problema. Segue abaixo os códigos:
SaveChangesFilter
public class SaveChangesFilter : System.Web.Mvc.ActionFilterAttribute
{
private EntidadesContext contexto;
public SaveChangesFilter(EntidadesContext contexto)
{
this.contexto = contexto;
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// grava modificações e fecha o contexto
if (filterContext.Exception == null)
{
// se não ocorreu nenhum erro, então grave as modificações
contexto.SaveChanges();
}
contexto.Dispose();
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
if (filterContext.Exception == null)
{
this.contexto.SaveChanges();
}
this.contexto.Dispose();
}
}
ProdutosController
private ProdutosDAO dao;
public ProdutosController(ProdutosDAO dao)
{
this.dao = dao;
}
//Outras ações ...
public ActionResult Adiciona(Produto produto)
{
dao.Adiciona(produto);
return RedirectToAction("Index");
}
NinjectWebCommon
private static void RegisterServices(IKernel kernel)
{
// aqui dentro faremos o registro do EntidadesContext
/*Utilizamos o método Bind do kernel para registrarmos um novo componente
* Quando algum DAO pedir uma instância de EntidadesContext, queremos devolver o próprio EntidadesContext, para configurarmos isso, utilizamos o método ToSelf
Mas queremos um contexto por requisição web, ou seja, o tempo de vida do contexto é de uma request (Request Scope). Para associar o tempo de vida de uma sessão à requisição, utilizamos o método InRequestScope*/
kernel.Bind<EntidadesContext>().ToSelf().InRequestScope();
/*
* Para registrar um filtro, utilizamos o extension method BindFilter do IKernel passando a ordem de execução do filtro e o escopo do filtro (escopo global para um filtro é sempre executado, por exemplo):
*/
int ordemDeExecucao = 1;
kernel.BindFilter<SaveChangesFilter>(FilterScope.Global, ordemDeExecucao);
}
ProdutosDAO
public class ProdutosDAO
{
private EntidadesContext contexto;
public ProdutosDAO(EntidadesContext contexto)
{
this.contexto = contexto;
}
public void Adiciona(Produto produto)
{
this.contexto.Produtos.Add(produto);
}
public void Remove(Produto produto)
{
this.contexto.Produtos.Remove(produto);
}
public void Atualiza(Produto produto)
{
this.contexto.Entry(produto).State = System.Data.EntityState.Modified;
}
public Produto BuscaPorId(int id)
{
return this.contexto.Produtos.Find(id);
}
public IEnumerable<Produto> Lista()
{
return this.contexto.Produtos;
}
public IEnumerable<Produto> ProdutosComPrecoMaiorDoQue(decimal? preco)
{
return new List<Produto>();
}
public IEnumerable<Produto> ProdutosDaCategoria(string nomeCategoria)
{
return new List<Produto>();
}
public IEnumerable<Produto> ProdutosDaCategoriaComPrecoMaiorDoQue(decimal? preco, string nomeCategoria)
{
return new List<Produto>();
}
public IEnumerable<Produto> ListaPaginada(int paginaAtual)
{
return new List<Produto>();
}
public IEnumerable<Produto> BuscaPorPrecoCategoriaENome(decimal? preco, string nomeCategoria, string nome)
{
return new List<Produto>();
}
}
Produto
public class Produto
{
public int Id { get; set; }
public string Nome { get; set; }
public string Descricao { get; set; }
public decimal Preco { get; set; }
public virtual Categoria Categoria { get; set; }
public int? CategoriaID { get; set; }
}
Meu projeto!
Obrigada,
Naiade Lima