.NET Core - Implementando o padrão Repositório - II
Hoje veremos como implementar o padrão repositório na plataforma .NET Core. |
No artigo anterior definimos a interface do nosso repositório e fizemos sua implementação na classe Repositorio.
O que é uma interface ? Uma interface, no paradigma da orientação a objetos, é um tipo de classe que contém apenas as assinaturas de métodos, propriedades, eventos e indexadores. A implementação dos membros é feita por uma classe concreta ou struct que implementa a interface. |
Agora vamos detalhar e entender cada método implementado.
private readonly
AppDbContext _context; public Repository(AppDbContext context) { _context = context; } |
Neste código estamos referenciando o contexto representando por AppDbContext na variável _context e estamos injetando uma instância do contexto no construtor e atribuindo o valor a essa variável.
Precisamos usar uma instância do context para poder acessar os dados e realizar a persistência via EF Core.
public IEnumerable<T> Get()
{
return _context.Set<T>().AsEnumerable<T>();
}
|
O método Get() recebe uma entidade (uma classe) e retorna um IEnumerable, ou seja uma lista completa das entidades. Aqui o método Set<T> do contexto retorna uma instância DbSet<T> para o acesso a entidades de determinado tipo no contexto.
Para entender melhor o IEnumerable veja o artigo : .NET - Comparando IEnumerable com IQueryable.
public IEnumerable<T> Get(Expression<Func<T, bool>> predicate)
{
return _context.Set<T>().Where(predicate).AsEnumerable<T>();
}
|
Neste código temos o método Get() que usa um delegate Func<> como parâmetro de entrada, onde será usada uma expressão lambda (Ex: p => p.ClienteId == ID) como critério, e, um predicate para validar o critério usando a cláusula Where. O retorno será uma lista IEnumerable.
Para entender melhor o delegate Func<> veja o meu artigo: C# - Apresentando o delegate Func
public T
GetById(Expression<Func<T, bool>> predicate) { return _context.Set<T>().SingleOrDefault(predicate); } |
Neste código temos o método GeById() que usa um delegate Func<> como parâmetro de entrada, onde será usada uma expressão lambda (Ex: p => p.ClienteId == ID) como critério, e, um predicate para validar o critério usando a expressão SingleOrDefault() retornado um objeto do tipo T.
public void Add(T entity)
{
_context.Set<T>().Add(entity);
}
public void Delete(T entity)
{
_context.Set<T>().Remove(entity);
}
|
Os métodos Add() e Delete() recebem uma entidade do tipo T, e, usam a instância do contexto para realizar a operação pertinente usando os métodos Add(), Remove().
public void Update(T entity)
{
_context.Entry(entity).State = EntityState.Modified;
_context.Set<T>().Update(entity);
}
|
O método Update recebe uma entidade e define o seu EntityState como Modified informando ao contexto que a entidade foi alterada e usando o método Update() para atualizar a entidade.
O estado da entidade é uma enumeração do tipo System.Data.EntityState que declara os seguintes valores:
O contexto não só trata a referência para todos os objetos recuperados do banco de dados, mas também detém os estados da entidade e mantém as modificações feitas nas propriedades da entidade. Este recurso é conhecido como controle de alterações ou ChangeTracking.
A mudança no estado da entidade de Unchanged para o estado Modified é o único estado que é feito automaticamente pelo contexto.
Os conceitos sobre Delegates (Func, Action, Predicate) e Expressões Lambdas são a base para entender o código usado na implementação feita.
Na próxima parte do artigo vamos implementar padrão Unit Of Work.
(Jesus a seus discípulos) "Na verdade, na
verdade vos digo que vós chorareis e vos lamentareis, e
o mundo se alegrará, e vós estareis tristes, mas a vossa
tristeza se converterá em alegria."
João 16:20
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Jose C Macoratti (@macorati) | TwitterSeção Entity Framework - Macoratti .NET