Criando um repositório genérico para Linq to SQL

Criando um repositório genérico para Linq to SQL

Vou demonstrar aqui uma forma bem rápida e produtiva para criarmos um repositório genérico com Linq to SQL. Basicamente devemos efetuar quatro operações básicas: Selecionar os dados, salvar, apagar e atualizar.

Vejamos como ficaria nossa interface para o repositório genérico:

01.public interface IRepositorio
02.{
03.   void Atualiza();
04. 
05.   void Apaga<TEntidade>(TEntidade entidade) where TEntidade : class;
06. 
07.   void Salva<TEntidade>(TEntidade entidade) where TEntidade : class;
08. 
09.   IQueryable<TEntidade> Seleciona<TEntidade>() where TEntidade : class;
10.}

Pegou a idéia com Generics? veja a implementação:

01.public class Repositorio : IRepositorio
02.{
03.    private readonly DBDataContext _db;
04. 
05.    public Repositorio (DBDataContext db)
06.    {
07.        _db = db;
08.    }
09. 
10.    public void Atualiza()
11.    {
12.        _db.SubmitChanges();
13.    }
14. 
15.    public void Apaga<TEntidade>(TEntidade entidade) where TEntidade : class
16.    {
17.        _db.GetTable<TEntidade>().DeleteOnSubmit(entidade);
18.        Atualiza();
19.    }
20. 
21.    public void Salva<TEntidade>(TEntidade entidade) where TEntidade : class
22.    {
23.        _db.GetTable<TEntidade>().InsertOnSubmit(entidade);
24.        Atualiza();
25.    }
26. 
27.    public IQueryable<TEntidade> Seleciona<TEntidade>() where TEntidade : class
28.    {
29.        return _db.GetTable<TEntidade>();
30.    }
31.}

Legal não? Simples e eficaz. Veja como podemos utilizar este repositório:

01.public class Negocio : INegocio
02.{
03.    private static IRepositorio _repositorio;
04. 
05.    public Negocio(IRepositorio db)
06.    {
07.        _repositorio = repositorio;
08.    }
09. 
10.    public void Chamadas()
11.    {
12.    //Seleciona os registros (Produtos)
13.    IQueryable<Produto> colecao = _repositorio.Seleciona<Produto>();
14. 
15.    Produto produto = colecao.Where(p => p.cod == 1).FirstOrDefault();
16. 
17.    produto.nome = "caixa";
18. 
19.    //Submete as alterações no produto selecionado
20.    _repositorio.Atualiza();
21. 
22.    Produto p = new Produto() { nome = "Caixa", valor = 100 }; 
23. 
24.    //Salva o novo produto
25.    _repositorio.Salva<Produto>(p);
26. 
27.    //Apaga o produto
28.    _repositorio.Apaga<Produto>(p);
29.    }
30.}

Claro que o uso de outros conceitos e patterns como IoC e UoW são essenciais!

Rafael Zaccanini
MTAC – Microsoft Technical Audience Contributor

Blog: http://www.rafaelzaccanini.net   
Twitter: 
@rafaelzaccanini   
Facebook: http://www.facebook.com/RafaelZaccaniniNet   

Classificar por: Data da Publicação | Mais Recente | Mais Úteis
Comentários
Página 1 de 1 (1 itens)