EF Core - Benefícios em usar o método Find


 Neste artigo veremos quais os benefícios em usar o método Find no EF Core.


Para localizar elementos em uma lista ou sequência quando usamos o EF Core geralmente usamos consultas LINQ com os métodos First, FirstOrDefault, Single e SingleOrDefault e também podemos usar o método Find() que é um método da classe DbContext.

 

Vamos iniciar apresentando as definições de cada um destes métodos de extensão:

  1. First :  Retorna o primeiro elemento de uma sequência. Se nenhum elemento for encontrado uma exceção será lançada;
     

  2. FirstOrDefault Retorna o primeiro elemento de uma sequência ou um valor padrão caso não seja encontrado nenhum elemento;
     

  3. Single : Retorna um único elemento específico da sequência que satisfaz uma condição. Se houver mais de um elemento lança uma exceção;
     

  4. SingleOrDefault : Retorna um único elemento específico da sequência ou um valor padrão se esse elemento não for encontrado;
     

  5. Find : Localiza um registro com os valores de chave primária fornecidos. Se a entidade já estiver no contexto (por causa de uma consulta anterior), o método Find a retornará se não estiver no contexto a consulta será enviada ao banco de dados;

Benefícios do método Find

O método Find é um método do Contexto do EF Core que usa a chave primária da entidade que esta sendo rastreada e faz uma busca pela chave primária primeiro no contexto, e, se não encontrar a entidade, então a consulta é feita na base de dados.

Os demais métodos irão todos serem executados diretamente no banco de dados e não vão consultar o contexto primeiro.

Localizar o registro com a chave primária é uma das tarefas comuns que realizamos. O método Find da propriedade DbSet do DbContext nos permite consultar rapidamente o banco de dados. Ele usa a chave primária para retornar a linha correspondente e vai retornar null se nenhuma linha correspondente for encontrada.

Assim como o Find sempre usa a chave primária para realizar a consulta não é necessário informar isso ao método.

private static void Main(string[] args)
{
      using var ctx = new ApplicationDbContext();          
      var cliente = ctx.Clientes.Find(1);            
       System.Console.WriteLine(cliente.Nome);
      Console.ReadKey();
}

Encontrar entidades com chaves primárias compostas é igualmente fácil. A chave composta consiste em mais de um campo (ou propriedade) da tabela.

O método Find usa a chave primária para construir a consulta SQL e a envia ao banco de dados para recuperar os dados. A ordem em que você especifica o parâmetro para o método Find deve corresponder à ordem da chave primária definida no banco de dados.

No exemplo a seguir estamos usando uma chave composta:

       private void LocalizarPorChaveCompostaId()
       {
           using var ctx = new ApplicationDbContext();   
           var pedidos = ctx.Pedidos.Find(1,1)
           Console.WriteLine($" {pedidos.PedidoId}  {pedidos.ItemId}");  
           Console.ReadKey();
       }

Assim dependendo do contexto valerá a pena usar o método Find por ser mais rápido e ser mais simples de usar.

E estamos conversados...

"Porque, se alguém cuida ser alguma coisa, não sendo nada, engana-se a si mesmo. Mas prove cada um a sua própria obra, e terá glória só em si mesmo, e não noutro."
Gálatas 6:3,4

Referências:


José Carlos Macoratti