Introducción

Muchas veces escribimos y ejecutamos consultas LINQ desde nuestra App y necesitamos ver que comandos SQL se están ejecutando por EF Core en la base de datos. 

En este artículo usaremos la funcionalidad Logging que esta implementada en .NET Core que nos permite hacer un seguimiento de los comandos SQL que se ejecutan mientras utilizamos nuestra App.

Microsoft.Extensions.Logging.Console

Así se llama el paquete nuget que debemos instalar. Una vez instalado, podremos configurar nuestro contexto para que permita mostrar los comandos SQL generados por EF Core en una aplicación de tipo consola.

Creamos nuestro Logger de consola

Dentro de nuestro contexto, creamos una propiedad de tipo LoggerFactory y establecemos dentro de la fabrica un objeto ConsoleLoggerProvider

public static readonly LoggerFactory loggerFactory =
    new LoggerFactory(new[] {
        new ConsoleLoggerProvider((c, l) => 
            c == DbLoggerCategory.Database.Command.Name && l == LogLevel.Information, true)
    });

El log de .NET Core puede mostrar mucha información. Para filtrar información, al objeto ConsoleLoggerProvider le pasamos DbLoggerCategory.Database.Command.Name lo cual muestra los comandos SQL y LogLevel.Information que permite información básica.

Usar nuestro Logger de consola

Dentro de nuestro contexto en el método OnConfiguring(DbContextOptionsBuilder optionsBuilder) y le especificamos a optionsBuilder que utilice la propiedad de LoggerFactory que creamos anteriormente.

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder
        .UseLoggerFactory(loggerFactory)
        .UseSqlServer(@"");
}

Y eso es todo. Ahora cada vez que usemos nuestro contexto, veremos los comandos SQL se ejecuten a través del mismo.

Viendo los resultados

Al ejecutar el siguiente bloque de codigo, en el cual hacemos un insert y dos consultas a una tabla, obtenemos los siguientes resultados

_context.Categories.Add(new Domain.Category
{
    Name = "Category 1"
});

_context.SaveChanges();

_context.Categories.ToList();

_context.Categories.Where(p => p.Name.Contains("a")).ToList();

 El resultado es el siguiente

console_logger
console log

 El ejemplo de este articulo esta basado en el ejemplo que venimos trabajando de ParkingApp. 

GITHUB /mpetrinidev

/blog-parking-ef-core-2

Branch [addLogger]

¡Si te gusto el articulo, compártelo con tus contactos en las redes sociales!

Escribe una respuesta a este comentario

avatar
500
  Subscribe  
Notificar de