No desenvolvimento, ao usar o framework ef core, ao usar expressões linq ou lambda, não podemos visualizar diretamente as instruções sql, o que é inconveniente para nós para solucionar problemas ou otimizar desempenho.
Este artigo usa o EF Core 5 como exemplopara visualizar as instruções SQL geradas pelo EF de saída.
Primeiro, crie uma nova variável de fábrica consolelogger no arquivo de inicialização com a variável "ConsoleLoggerFactory", e a instrução sql gerada será enviada para o console, o código é o seguinte:
Adicione a saída de log ao método ConfigureServices configurando o código DbContext da seguinte forma:
Inicie o projeto e veja a saída do console da seguinte forma:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executado DbCommand (1ms) [Parâmetros=[], CommandType='Text', CommandTimeout='30'] SELECT [a]. [Id], [a]. [Deficiente], [a]. [Link], [a]. [Nome], [a]. [PinYin], [a]. [Posição], [a]. [_CreateTime], [a]. [_CreateTimeStamp], [a]. [_UpdateTime], [a]. [_UpdateTimeStamp] DE [Área] COMO [um]
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executado DbCommand (19ms) [Parâmetros=[p0='?' (Tamanho = 4000)], TipoComando='Texto', TempoComando Expirado='30'] SELECT * FROM Área ONDE pinYin = @p0
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executado DbCommand (1ms) [Parâmetros=[], CommandType='Text', CommandTimeout='30'] SELECT * FROM Área
Se a instrução SQL com a condição where só pode visualizar as variáveis parametrizadas, não os valores específicos passados, a seguinte configuração é adicionada:
Permita a inclusão dos dados da aplicação em mensagens de exceção, logs e mais.
Isso pode incluir valores atribuídos às propriedades da instância da entidade,
valores de parâmetros dos comandos enviados ao banco de datos, e outros dados semelhantes.
Essa bandeira só deve ser ativada se houver medidas de segurança em vigor
Com base na sensibilidade desses dados.
Observe se a inscrição estiver sendo aprovada
Chame o gerador Microsoft.EntityFrameworkCore.DbContextOptions.UseInternalServiceProvider(system). IServiceProvider),
Essa opção deve então ser configurada da mesma forma para todo uso desse provedor de serviço.
Considere não chamar Microsoft.EntityFrameworkCore.DbContextOptionsGenerator.UseInternalServiceProvider(system). IServiceProvider)
Portanto, o EF gerenciará o provedor de serviço e poderá criar novas instâncias conforme necessário
A configuração completa é a seguinte:
As renderizações são as seguintes:
Claro, as configurações acima também podem ser configuradas sobrescrevendo o método OnConfiguring do DbContext (não recomendado):
(Fim)
|