Usuário com melhor resposta
Uso do Repositório de Dados no Entity Framework 6, método Get()

Pergunta
-
Bom dia a todos.
Gostaria de uma ajuda, seguinte. Uso o EF6 usando o repositório de dados conforme próprio artigo da Microsoft, está implementado idêntico ao artigo ( https://msdn.microsoft.com/pt-br/library/dn630213.aspx?f=255&MSPPError=-2147217396 ), mas estou tendo um problema com o metodo Get. Segundo o artigo, o método Get usa o parâmetro e gera a select dinamicamente já filtrando no Where o que está no parâmetro. Pelo menos foi isso que entendi.
Então fiz todo meu sistema usando o Get, mas aos poucos ele ficou lento. Após usar o profile verifiquei que o Get na verdade está fazendo a consulta toda no banco, sem o Where dos parametros. Poderiam me ajudar.
Segue um exemplo de como uso:
ZPRECETAPROCFAB recetapa = new ZPRECETAPROCFABRepositorio().Get(c => c.CODCOLIGADA == procfab.CODCOLIGADA && c.CODFABRIL == procfab.CODFABRIL &&
c.IDPROCFAB == procfab.IDPROCFAB && c.CODGRMAQEQ == codgrmaqeq_completo).FirstOrDefault();Retorno do select no profile:
SELECT
[Extent1].[CODCOLIGADA] AS [CODCOLIGADA],
[Extent1].[CODFABRIL] AS [CODFABRIL],
[Extent1].[IDPROCFAB] AS [IDPROCFAB],
[Extent1].[IDSEQ] AS [IDSEQ],
[Extent1].[IDRECURSO] AS [IDRECURSO],
[Extent1].[CODGRMAQEQ] AS [CODGRMAQEQ]
FROM [dbo].[ZPRECETAPROCFAB] AS [Extent1]Como podem ver, não tem o Where.
Respostas
-
Estou considerando que seu código está idêntico ao do artigo, então faça um teste alterando o tipo do parâmetro da função Get do repositório para Expression<Func<TSource, Boolean>>. Aí ficaria assim:
public IQueryable<TEntity> Get(Expression<Func<TEntity, bool>> predicate) { return GetAll().Where(predicate); }
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
- Sugerido como Resposta Rafael Almeida - MVPMVP segunda-feira, 29 de janeiro de 2018 14:50
- Marcado como Resposta jpdelboni segunda-feira, 29 de janeiro de 2018 16:05
Todas as Respostas
-
Estou considerando que seu código está idêntico ao do artigo, então faça um teste alterando o tipo do parâmetro da função Get do repositório para Expression<Func<TSource, Boolean>>. Aí ficaria assim:
public IQueryable<TEntity> Get(Expression<Func<TEntity, bool>> predicate) { return GetAll().Where(predicate); }
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
- Sugerido como Resposta Rafael Almeida - MVPMVP segunda-feira, 29 de janeiro de 2018 14:50
- Marcado como Resposta jpdelboni segunda-feira, 29 de janeiro de 2018 16:05
-
Estou considerando que seu código está idêntico ao do artigo, então faça um teste alterando o tipo do parâmetro da função Get do repositório para Expression<Func<TSource, Boolean>>. Aí ficaria assim:
public IQueryable<TEntity> Get(Expression<Func<TEntity, bool>> predicate) { return GetAll().Where(predicate); }
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
Rafael Almeida
Microsoft Developer .NET
Microsoft Certified Professional
Development Leader at JAMSOFT Informática
Email: ralms@ralms.net
Blog - GitHub - LinkedIn - Twitter -