Criando um Repositório Genérico Com EFCodeFirst (EntityFramework 4.1)

Frameworks, em alguns aspectos, são ferramentas poderosas que auxiliam no desenvolvimento, adiantando tarefas massantes e repetitivas. O EntityFramework é poderoso framework não só de persistência, mas manipulação de dados, uma vez que também tenta dar conta de outros aspectos referentes as complexas rotinas de um sistema de base de dados. Aliado aos mais potentes recursos das linguagens .net, é possível se alcançar agilidade e diminuir o custo de escrita de classes de persistência que apresentam um aspecto de CRUD. Aqui demonstrarei como escrever uma classe Genérica de persistência usando os recursos do EFCodeFirst.

 

Criando contratos das Entidades de negócio

Primeiramente vamos escrever nossa interface que servirá de contrato para nosso repositório. Para isso usaremos os recursos da classe System.Collections.Generic. Abaixo segue o fonte de nossa interface.

 

Observe que "<T>" é uma representação de IEntity que não passa de uma interface usada como contrato para todas as entidades da regra de negócio.

 

 

Implementação dos contratos

Abaixo segue uma implementação da interface IEntity

 

Abaixo segue a implementação da interface IRepository<T>

 

O código acima não é o suficiente para que a "mágica" aconteça. Perceba que a criação do nosso repositório genérico é exigido um objeto DbContext. Este objeto pertence a classe System.Data.Entity. Ele faz parte do Entityframework e abstrai as tarefas de consulta e persistência no banco de dados. Abaixo segue o código desta classe

 

Concluindo, O EntityFramework é uma ferramenta que nos ajuda a resolver alguns problemas em desenvolver códigos massantes e repetitivos para manipulação de dados Com os recursos do .net framework e da linguagem C# podemos construir classes muito eficientes como por exemplo uma classe genérica de persistência.

 

Arquivos usados

IEntity.cs

Empresa.cs

IRepository.cs

GenericRepository.cs

DataContext.cs

 

Para saber mais:
Aprofunde seus conhecimentos sobre este tema na comunidade C# (Csharp)
Aprofunde seus conhecimentos sobre este tema na comunidade SQLServer

 

Exibições: 2124

Comentar

Você precisa ser um membro de DevBrasil para adicionar comentários!

Entrar em DevBrasil

Comentário de Aislan Miranda em 22 janeiro 2013 às 20:38

Segue uma outra implementação de repositório genérico,show de bola! Quem não conseguir implementar este repositório caso alguem se interesse, falem que disponibilizo um projeto em C# rodando bonitinho! Valeu!
http://www.tcscblog.com/2012/06/22/entity-framework-generic-reposit...

Comentário de Michaell Dantas em 15 janeiro 2012 às 15:05

Parabéns Yan..a galera de Natal ta detonando !!!
Show de bola seu artigo !! 

Comentário de Ray Silva em 29 novembro 2011 às 9:35

Parabéns, excelente artigo.

Comentário de Yan de Lima Justino em 29 novembro 2011 às 9:28

Muito bom Jone. Bem completo... Parabéns

Comentário de Jone Pólvora em 28 novembro 2011 às 22:24

Postei em meu blog uma solução de repositório que trabalha com o padrão Unit of Work e possui implementações concretas para o Entity Framework code first e o tradicional ObjectContext. Quem quiser dar uma olhada e pegar algumas idéias, é só conferir. Repositorio

Comentário de Uitan Santos Maciel em 25 novembro 2011 às 20:49

Muito bom Yan... continue assim...

Comentário de Yan de Lima Justino em 25 novembro 2011 às 9:26

Uitan Santos Maciel Olha aí no exemplo o método Atualizar da classe GenericRepository. Há uma sobrecarga de método nele que recebe um parâmetro attachement, no qual passo as dependências do objeto

 

public void Atualizar(T model, params object[] attachment)        
{
   object TEntity = model;

   this.Context.Entry(TEntity).State = System.Data.EntityState.Modified;
   foreach (var attach in attachment)                 
      this.Context.Entry(attach).State = System.Data.EntityState.Modified;
   this.Context.SaveChanges();
}

 

Comentário de Uitan Santos Maciel em 25 novembro 2011 às 4:48

Muito bom... parabéns. Sou meio que iniciante no EF e já fiz diversos repositórios genericos com estrutras diferente dessa que vc fez, no entanto sempre quebro minha cabeça sobre como fazer o Update. Vc poderia postar exemplos de como fazer o Update utilizando essa sua estrutura?

Comentário de Thiago Zulato em 24 novembro 2011 às 16:10

Muito show...parabéns.. excelente artigo.

Comentário de Paulo Freire em 23 novembro 2011 às 11:38

Show de bola hein, parabéns garoto.

© 2019   Criado por Ramon Durães.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço