En desarrollo, al usar el framework core EF, al usar expresiones linq o lambda, no podemos ver directamente las sentencias SQL, lo que nos resulta incómodo para solucionar problemas u optimizar el rendimiento.
Este artículo utiliza EF Core 5 como ejemplopara ver las sentencias SQL generadas por la EF de salida.
Primero, crea una nueva variable de fábrica de consolalogger en el archivo de arranque con la variable "ConsoleLoggerFactory", y la instrucción sql generada se enviará a la consola, el código es el siguiente:
Añade la salida de log al método ConfigureServices configurando el código DbContext de la siguiente manera:
Inicia el proyecto y ve la salida de la consola de la siguiente manera:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Ejecutado DbCommand (1ms) [Parámetros=[], CommandType='Text', CommandTimeout='30'] SELECT [a]. [Id], [a]. [Discapacitado], [a]. [Enlace], [a]. [Nombre], [a]. [PinYin], [a]. [Posición], [a]. [_CreateTime], [a]. [_CreateTimeStamp], [a]. [_UpdateTime], [a]. [_UpdateTimeStamp] DESDE [Área] COMO [a]
info: Microsoft.EntityFrameworkCore.Database.Command[20101] DbCommand ejecutado (19ms) [Parámetros=[p0='?' (Tamaño = 4000)], TipoComando='Texto', Tiempode Límite='30'] SELECT * FROM Area WHERE pinYin = @p0
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Ejecutado DbCommand (1ms) [Parámetros=[], CommandType='Text', CommandTimeout='30'] SELECT * FROM Área
Si la sentencia SQL con la condición where solo puede ver las variables parametrizadas, no los valores específicos que pasaron, se añade la siguiente configuración:
Permite que los datos de la aplicación se incluyan en mensajes de excepción, registros y más.
Esto puede incluir valores asignados a las propiedades de la instancia de la entidad,
valores de parámetros de los comandos enviados a la base de datos y otros datos similares.
Esta bandera solo debe activarse si existen medidas de seguridad
Según la sensibilidad de estos datos.
Fíjate si la solicitud está en proceso
Llama al generador Microsoft.EntityFrameworkCore.DbContextOptions.UseInternalServiceProvider(system). IServiceProvider),
Esta opción debe configurarse de la misma manera para todo el uso de ese proveedor de servicios.
Considera no llamar a Microsoft.EntityFrameworkCore.DbContextOptionsGenerator.UseInternalServiceProvider(system). IServiceProvider)
Por tanto, EF gestionará el proveedor de servicios y podrá crear nuevas instancias según sea necesario
La configuración completa es la siguiente:
Las representaciones son las siguientes:
Por supuesto, los ajustes anteriores también pueden configurarse sobrescribiendo el método OnConfiguring del DbContext (no recomendado):
(Fin)
|