Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Vantagem de não usar apenas o Linq (Aula: assumindo o controle do SQL no EF)

Ola, ainda não consegui entender a vantagem no FromSQL se somos obrigados a jogar para uma entidade mapeada. O SQL do exemplo, mesmo com view ficou meio ruim e poderia ser feito melhor com Linq puro, que é quase um SQL, por exemplo:

                    var queryEstrelados =
                        from ator in contexto.Atores
                        join elenco in contexto.Elenco on ator.Id equals elenco.Ator.Id
                        group ator by new { ator.Id, ator.PrimeiroNome, ator.UltimoNome } into estrelados
                        let filmesCount = estrelados.Count()
                        orderby filmesCount descending
                        select new
                        {
                            Id = estrelados.Key.Id,
                            Nome = $"{estrelados.Key.PrimeiroNome} {estrelados.Key.UltimoNome}",
                            Filmes = filmesCount
                        };

                    foreach (var ator in queryEstrelados.Take(5))
                    {
                        System.Console.WriteLine($"O ator ({ator.Id}) {ator.Nome} atuou em {ator.Filmes} filmes.");
                    }

Gera a consulta:

Executed DbCommand (15ms) [Parameters=[@__p_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
SELECT TOP(@__p_0) [ator].[actor_id] AS [Id], [ator].[first_name] AS [PrimeiroNome], [ator].[last_name] AS [UltimoNome], COUNT(*) AS [Filmes]
FROM [actor] AS [ator]
INNER JOIN [film_actor] AS [elenco] ON [ator].[actor_id] = [elenco].[actor_id]
GROUP BY [ator].[actor_id], [ator].[first_name], [ator].[last_name]
ORDER BY [Filmes] DESC

Bem mais limpa e simples que o FromSQL.

Sei que é só um exemplo pra ensinar usar o FromSQL e isso é importante, mas existe algum motivo pra usar quando não da pra usar o Linq puro? Porque não deixar de lado o EF, pra esse caso e baixar um DataReader direto no banco?

Fiquei pensando e não consegui bolar um exemplo em que não da pra usar no Linq puro, e valeria a pena usar um FromSQL que me obriga a enviar para entidades mapeadas.

1 resposta
solução!

Fala, Vinicius, tudo bem?

De fato fica meio difícil achar um cenário onde o uso do FromSQL é mais vantajoso. Na documentação desse recurso a Microsoft fala que ele "pode ser útil se a consulta não pode ser escrita em LINQ, ou se ela resultar em queda de performance".

Contudo, imagine um cenário em que seu usuário de banco de dados não tem permissão de acesso às tabelas "concretas" do banco de dados. Isso é possível em empresas com políticas rígidas de acesso a seus dados, ou quando esses dados são originados de outras fontes e exportados via ETL para esse banco de dados de destino.

Já trabalhei em uma aplicação que não tinha acesso aos dados puros, por questões de segurança da informação. A única maneira de utilizá-los em nossa app era através de views. Nesse caso, uma aplicação usando EF Core poderia utilizar o FromSQL.

Agradeço sua questão. Espero ter ajudado trazendo esse exemplo. Qualquer coisa responde aqui, tá?

Abraços e bons estudos!