5
respostas

"ProdutoDAOEntity.Produtos()" é um método, que não é válido no contexto fornecido

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace Alura.Loja.Testes.ConsoleApp { class Program { static void Main(string[] args) { // GravarUsandoAdoNet(); // GravarUsandoEntity(); // RecuperaProdutos(); // ExcluirProdutos(); // RecuperaProdutos(); AtualizaProduto(); }

private static void AtualizaProduto() { GravarUsandoEntity(); RecuperaProdutos();

using (var repo = new ProdutoDAOEntity()) { Produto primeiro = repo.Produtos.First(); primeiro.Nome = "Nome alterado"; repo.Atualizar(primeiro); } RecuperaProdutos(); }

private static void ExcluirProdutos() { using(var repo = new ProdutoDAOEntity()) { IList produtos = repo.Produtos(); Console.WriteLine("Foram encontrados {0} produtos.", produtos.Count); foreach(var item in produtos) { repo.Remover(item); } } }

private static void RecuperaProdutos() { using (var repo = new ProdutoDAOEntity()) { IList produtos = repo.Produtos(); foreach (var item in produtos) { Console.WriteLine(item.Nome); } } }

private static void GravarUsandoEntity() { Produto p = new Produto(); p.Nome = "Harry Potter e a Ordem da Fênix"; p.Categoria = "Livros"; p.Preco = 19.89;

using (var contexto = new ProdutoDAOEntity()) { contexto.Adicionar(p); } }

private static void GravarUsandoAdoNet() { Produto p = new Produto(); p.Nome = "Harry Potter e a Ordem da Fênix"; p.Categoria = "Livros"; p.Preco = 19.89;

using (var repo = new ProdutoDAO()) { repo.Adicionar(p); } } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace Alura.Loja.Testes.ConsoleApp { class ProdutoDAOEntity : IProdutoDAO, IDisposable { private LojaContext contexto;

public ProdutoDAOEntity() { this.contexto = new LojaContext(); }

public void Adicionar(Produto p) { contexto.Produtos.Add(p); contexto.SaveChanges(); }

public void Atualizar(Produto p) { contexto.Produtos.Update(p); contexto.SaveChanges(); }

public void Dispose() { contexto.Dispose(); }

public IList Produtos() { return contexto.Produtos.ToList(); }

public void Remover(Produto p) { contexto.Produtos.Remove(p); contexto.SaveChanges(); } } }

5 respostas

Bem, Produtos é uma Propriedade do seu Context.

Você deve acessar somente com ".Produto", sem os parênteses . Assim vai funcionar :)

No material de aula esta assim e não compila

public class ProdutoDAOEntity : IProdutoDAO, IDisposable
{

    // ...

    public IList<Produto> Produtos()
    {
        contexto.Produtos.ToList();
    }

}

você deve fazer assim para compilar

public class ProdutoDAOEntity : IProdutoDAO, IDisposable
{

    // ...

    public IList<Produto> Produtos()
    {
        return contexto.Produtos.ToList();
    }

}

Complementando a resposta do amigo Cézar, como na declaração do metodo Produtos() definiu-se que o mesmo RETORNA uma lista, o "return" torna-se obrigatório.

Pessoa,

Funcionou com o que fiz abaixo. O objeto repo instanciado de ProdutoDAOEntity tem ums variável de instancia chamada contexto. Tambem tive que alterar a visiblidade da contexto de Private para Public.

Apliquei isso para os demais metodos e funcionou. Deve haver uma solucao mais elegante mas deixo a cargo de vcs complementarem este tópico.

Alterem, testem e me digam se conseguiram.

 private static void AtualizaProduto()
        {
            GravarUsandoEntity();
            RecuperaProdutos();

            using (var repo = new ProdutoDAOEntity())
            {
                //Produto primeiro = repo.Produtos.First();
                Produto primeiro = repo.contexto.Produtos.First() ;
                primeiro.Nome = "Cassino Royale - Editado";
                repo.contexto.Produtos.Update(primeiro);
                repo.contexto.SaveChanges();
            }

            RecuperaProdutos();

        }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Alura.Loja.Testes.ConsoleApp
{
    class ProdutoDAOEntity : IProdutoDAO, IDisposable
    {

      public LojaContext contexto;

        public ProdutoDAOEntity()
        {
            this.contexto = new LojaContext();
        }

        public void Adicionar(Produto p)
        {
            contexto.Produtos.Add(p);
            contexto.SaveChanges();

        }

        public void Atualizar(Produto p)
        {
            contexto.Produtos.Update(p);
            contexto.SaveChanges();
        }

        public void Dispose()
        {
            contexto.Dispose();
        }

        public IList<Produto> Produto()
        {
            return contexto.Produtos.ToList();
        }

        public void Remover(Produto p)
        {
            contexto.Produtos.Remove(p);
            contexto.SaveChanges();
        }
    }
}

Consegui fazendo dessa maneira, deixei a propriedade Contexto como private e alterei o método AtualizarProduto, segue:

        private static void AtualizarProdutos()
        {
            //GravarUsandoEntity();
            RecuperarProdutos();

            using (var repo = new ProdutoDAOEntity())
            {
                Produto produto = repo.Produtos().First();
                produto.Nome = "Harry Potter e a Ordem da Fênix - Produto Editado";
                repo.Atualizar(produto);
            }
            RecuperarProdutos();
        }