none
Não consigo entender como consumir o Repository Pattern RRS feed

  • Pergunta

  • Olá a todos!

    Criação do meu domínio: ok;

    Criação da interface repositório genérico: ok;

    Criação da classe repositório genérico: ok;

    A partir daí eu me perco todo, tentei várias formas e nunca da certo.

    Preciso aprender a usar o repositório no mvc.

    Cleber.

    segunda-feira, 9 de dezembro de 2013 19:33

Respostas

  • Ta com alguma inconformidade 

    Exemplo:

    public interface IGenericoRepositorio<T> where T : class
        {
            IQueryable<T> ListAll();
            IQueryable<T> Search(Expression <Func<T, bool>> predicate);
            T Find(int id);
            void Add(T entity);
            void Delete(T entity);
            void Edit(T entity);
    
            void Save();
            void Dispose();
        }
    public interface IClienteRepositorio : IGenericoRepositorio<Cliente>
        {
            void Add(Cliente cliente);
            void Edit(Cliente cliente);
            void Delete(int id);
            IQueryable<Cliente> GetAll();
            Cliente Find(int id);
    
            void SaveChanges();
        }

    Eu achei estranho houve repetição você nem precisa na IClienteRepositorio fazer os métodos novamente!

    Ta estranho !!! ta errado no meu entender!

    O certo:

    public class Cliente
    {
    	public int ClienteId { get; set; }
    	public string NomeCliente { get; set; }
    	public string EnderecoCliente { get; set; }
    }
    public interface IGenericoRepositorio<T> where T : class , IDisposable
    {
    	IQueryable<T> ListAll();
    	IQueryable<T> Search(Expression<Func<T, bool>> predicate);
    	T Find(int id);
    	void Add(T entity);
    	void Delete(T entity);
    	void Edit(T entity);
    	void Save();        
    }
    public interface IClienteRepositorio : IGenericoRepositorio<Cliente>  { }
    
    public class ClienteRepositorio : IClienteRepositorio
    {
    
    	public IQueryable<Cliente> ListAll()
    	{
    		throw new NotImplementedException();
    	}
    
    	public IQueryable<Cliente> Search(Expression<Func<Cliente, bool>> predicate)
    	{
    		throw new NotImplementedException();
    	}
    
    	public Cliente Find(int id)
    	{
    		throw new NotImplementedException();
    	}
    
    	public void Add(Cliente entity)
    	{
    		throw new NotImplementedException();
    	}
    
    	public void Delete(Cliente entity)
    	{
    		throw new NotImplementedException();
    	}
    
    	public void Edit(Cliente entity)
    	{
    		throw new NotImplementedException();
    	}
    
    	public void Save()
    	{
    		throw new NotImplementedException();
    	}
    }

    Porque acredito que no outro nem tem ListAll então ta faltando inclusive implementação ... !!!

    Amigo eu pelo pouco de experiência me parece errado essa parte e a final!


    Fulvio Cezar Canducci Dias

    • Marcado como Resposta Cleber Hans segunda-feira, 9 de dezembro de 2013 23:29
    segunda-feira, 9 de dezembro de 2013 21:17

Todas as Respostas

  • Se tem algum código?

    Fulvio Cezar Canducci Dias

    segunda-feira, 9 de dezembro de 2013 19:42
  • Oi Fúlvio, vamos lá!

    namespace Domain
    {
        public class Cliente
        {
            public int ClienteId { get; set; }
            public string NomeCliente { get; set; }
            public string EnderecoCliente { get; set; }
        }
    }


    public interface IGenericoRepositorio<T> where T : class
        {
            IQueryable<T> ListAll();
            IQueryable<T> Search(Expression <Func<T, bool>> predicate);
            T Find(int id);
            void Add(T entity);
            void Delete(T entity);
            void Edit(T entity);
    
            void Save();
            void Dispose();
        }


    public interface IClienteRepositorio : IGenericoRepositorio<Cliente>
        {
            void Add(Cliente cliente);
            void Edit(Cliente cliente);
            void Delete(int id);
            IQueryable<Cliente> GetAll();
            Cliente Find(int id);
    
            void SaveChanges();
        }


    public class ClienteRepositorio : RepositorioGenerico<DataContext, Cliente>, IClienteRepositorio
        {
            private DataContext _db;
    
            public ClienteRepositorio()
            {
                _db = new DataContext();
            }
    
            public void Add(Cliente cliente)
            {
                _db.Clientes.Add(cliente);
            }
    
            public void Edit(Cliente cliente)
            {
                _db.Entry<Cliente>(cliente).State = EntityState.Modified;
            }
    
            public void Delete(int id)
            {
                _db.Clientes.Remove(_db.Clientes.Find(id));
            }
    
            public IQueryable<Cliente> GetAll()
            {
                return _db.Clientes;
            }
    
            public Cliente Find(int id)
            {
                return _db.Clientes.Find(id);
            }
    
            public void SaveChanges()
            {
                _db.SaveChanges();
            }
    
            public void Dispose()
            {
                _db.Dispose();
            }
        }


    public class ClientesController : Controller
        {
            private IClienteRepositorio cr;
            
            public ClientesController()
            {
               cr = new ClienteRepositorio();
            }
    
            //
            // GET: /Clientes/
    
            public ActionResult Index()
            {
                return View(cr.ListAll());
            }
    
            //
            // GET: /Clientes/Details/5
    
            public ActionResult Details(int id = 0)
            {
                Cliente cliente = cr.Find(id);
                if (cliente == null)
                {
                    return HttpNotFound();
                }
                return View(cliente);
            }
    
            //
            // GET: /Clientes/Create
    
            public ActionResult Create()
            {
                return View();
            }
    
            //
            // POST: /Clientes/Create
    
            [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Create(Cliente cliente)
            {
                if (ModelState.IsValid)
                {
                    cr.Add(cliente);
                    cr.Save();
                    //return RedirectToAction("Index");
                }
    
                return View(cliente);
            }
    
            //
            // GET: /Clientes/Edit/5
    
            public ActionResult Edit(int id = 0)
            {
                Cliente cliente = cr.Find(id);
                if (cliente == null)
                {
                    return HttpNotFound();
                }
                return View(cliente);
            }
    
            //
            // POST: /Clientes/Edit/5
    
            [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Edit(Cliente cliente)
            {
                if (ModelState.IsValid)
                {
                    cr.Edit(cliente);
                    
                    //return RedirectToAction("Index");
                }
                return View(cliente);
            }
    
            //
            // GET: /Clientes/Delete/5
    
            public ActionResult Delete(int id = 0)
            {
                Cliente cliente = cr.Find(id);
                if (cliente == null)
                {
                    return HttpNotFound();
                }
                return View(cliente);
            }
    
            //
            // POST: /Clientes/Delete/5
    
            [HttpPost, ActionName("Delete")]
            [ValidateAntiForgeryToken]
            public ActionResult DeleteConfirmed(int id)
            {
                Cliente cliente = cr.Find(id);
                cr.Delete(cliente);
                cr.SaveChanges();
                return RedirectToAction("Index");
            }
    
            protected override void Dispose(bool disposing)
            {
                cr.Dispose();
                base.Dispose(disposing);
            }
        }

    Aí eu crio as respectivas views (botão direito do mouse sobre Create (por exemplo) e mando bala.

    So que não grava, não edita, não não não!!!

    Fúlvio, o que está faltando eu fazer para entender o conceito, pois até os genéricos pra mim tudo bem, não entendo é como aplicar.

    Cleber

    segunda-feira, 9 de dezembro de 2013 20:56
  • Ta com alguma inconformidade 

    Exemplo:

    public interface IGenericoRepositorio<T> where T : class
        {
            IQueryable<T> ListAll();
            IQueryable<T> Search(Expression <Func<T, bool>> predicate);
            T Find(int id);
            void Add(T entity);
            void Delete(T entity);
            void Edit(T entity);
    
            void Save();
            void Dispose();
        }
    public interface IClienteRepositorio : IGenericoRepositorio<Cliente>
        {
            void Add(Cliente cliente);
            void Edit(Cliente cliente);
            void Delete(int id);
            IQueryable<Cliente> GetAll();
            Cliente Find(int id);
    
            void SaveChanges();
        }

    Eu achei estranho houve repetição você nem precisa na IClienteRepositorio fazer os métodos novamente!

    Ta estranho !!! ta errado no meu entender!

    O certo:

    public class Cliente
    {
    	public int ClienteId { get; set; }
    	public string NomeCliente { get; set; }
    	public string EnderecoCliente { get; set; }
    }
    public interface IGenericoRepositorio<T> where T : class , IDisposable
    {
    	IQueryable<T> ListAll();
    	IQueryable<T> Search(Expression<Func<T, bool>> predicate);
    	T Find(int id);
    	void Add(T entity);
    	void Delete(T entity);
    	void Edit(T entity);
    	void Save();        
    }
    public interface IClienteRepositorio : IGenericoRepositorio<Cliente>  { }
    
    public class ClienteRepositorio : IClienteRepositorio
    {
    
    	public IQueryable<Cliente> ListAll()
    	{
    		throw new NotImplementedException();
    	}
    
    	public IQueryable<Cliente> Search(Expression<Func<Cliente, bool>> predicate)
    	{
    		throw new NotImplementedException();
    	}
    
    	public Cliente Find(int id)
    	{
    		throw new NotImplementedException();
    	}
    
    	public void Add(Cliente entity)
    	{
    		throw new NotImplementedException();
    	}
    
    	public void Delete(Cliente entity)
    	{
    		throw new NotImplementedException();
    	}
    
    	public void Edit(Cliente entity)
    	{
    		throw new NotImplementedException();
    	}
    
    	public void Save()
    	{
    		throw new NotImplementedException();
    	}
    }

    Porque acredito que no outro nem tem ListAll então ta faltando inclusive implementação ... !!!

    Amigo eu pelo pouco de experiência me parece errado essa parte e a final!


    Fulvio Cezar Canducci Dias

    • Marcado como Resposta Cleber Hans segunda-feira, 9 de dezembro de 2013 23:29
    segunda-feira, 9 de dezembro de 2013 21:17
  • Fúlvio, nota 10 pra você.

    Ainda tenho algumas dúvidas sobre o tema, vou tirando ao longo da semana.

    Muito obrigado mesmo.

    Cleber.

    segunda-feira, 9 de dezembro de 2013 23:30