-
FirstOrDefault:
- Pode ser usado com EF Core, ou em coleção em memoria, faz a busca no banco ou na coleção, caso não encontre retorna null
- Vc pode passar um valor default caso deseje
- _context.Playlists.FirstOrDefault(x => x.Id == id, new Playlist());
-
First
- Comportamento semelhante o
FirstOrDefault
, entretanto lança um exception caso não encontrado
- Comportamento semelhante o
-
Find
- Pode ser usado com ef core, ou em coleção em memoria
- Vc para um
params object?[]? keyValues
de chaves primarias - Primeiro busca nos itens já trackeados e retorna sem fazer busca ao banco de dados, caso não encontre faz a busca, caso não encontre na busca retora
null
- change-tracking - querying tracking
-
FirstOrDefaultAsync ou FindAsync
- Seguem os mesmos respectivos comportamentos, porém fazem uma operação assíncrona
- Normalmente operações E/S (como a solicitação de dados de uma rede, o acesso a um banco de dados ou a leitura e gravação em um sistema de arquivos) tem um desempenho melhor com tarefas assíncronas
- Não bloqueiam o thread principal pois usam um pool de threads
-
Normalmente uso o assíncrono para fazer busca e persistencias e síncrono quando ocorre apenas trackeamento, ex:
- await _context.Playlists.ToListAsync()
- await _context.Playlists.FirstOrDefaultAsync();
- _context.Playlists.Add(...)
- _context.Playlists.Delete(...)
- await _context.SaveChangesAsync();
Muito obriado pela explicação, ajudou demais!