O código está igualzinho ao da aula, o programa funciona, mas o código SQL não aparece na tela. Por que? Segue código das dias classes principais:
Class PROGRAM:
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Loja
{
class Program
{
static void Main(string[] args)
{
using (var contexto = new LojaContext())
{
var serviceProvider = contexto.GetInfrastructure<IServiceProvider>();
var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
loggerFactory.AddProvider(SqlLoggerProvider.Create());
var produtos = contexto.Produtos.ToList();
foreach (var p in produtos)
{
Console.WriteLine(p);
}
}
}
}
}
Class SQLLOGGERPROVIDER:
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.Logging;
using System;
namespace Loja
{
public class SqlLoggerProvider : ILoggerProvider
{
public static ILoggerProvider Create()
{
return new SqlLoggerProvider();
}
public ILogger CreateLogger(string categoryName)
{
if (categoryName == typeof(IRelationalCommandBuilderFactory).FullName)
{
return new SqlLogger();
}
else return new NullLogger();
}
public void Dispose()
{
}
internal class NullLogger : ILogger
{
public IDisposable BeginScope<TState>(TState state)
{
return null;
}
public bool IsEnabled(LogLevel logLevel)
{
return true;
}
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
//não faz nada
}
}
public class SqlLogger : ILogger
{
public IDisposable BeginScope<TState>(TState state)
{
return null;
}
public bool IsEnabled(LogLevel logLevel)
{
return true;
}
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
Console.WriteLine("");
Console.WriteLine(formatter(state, exception));
Console.WriteLine("");
}
}
}
}