EF Core 5.0 - Simple Loging com LogTo - II |
Neste artigo vou apresentar um exemplo prático do novo recurso do EF Core 5 que facilita a realização de logging. |
Continuando o artigo anterior veremos agora um exemplo prático de utilização do recurso de simple log do EF Core 5.0.
Como exemplo eu vou usar o banco de dados Northwind.mdf e a tabela Customers em um projeto Console do tipo .NET Core no ambiente do .NET 5.0.
Criando e configurando o projeto Console
Crie um projeto Console do tipo .NET Core e a seguir vamos vamos incluir no projeto o pacotes do EF Core.
Para este exemplo vamos precisar incluir apenas o pacote Microsoft.EntityFrameworkCore.SqlServer versão 5.0.1.
Podemos fazer isso usando o comando : dotnet add package Microsoft.EntityFrameworkCore.SqlServe -version 5.0.1
Podemos também fazer isso via menu Tools ..->Manage Nuget Packages for solution e usar a guia Browse informando o nome do pacote.
Como vamos acessar a tabela Customers do banco de dados Northwind vamos criar uma classe Customer no projeto.
Crie uma pasta Models no projeto e nesta pasta crie a classe Customer:
public class Customer
{
public string CustomerId { get; set; }
public string CompanyName { get; set; }
public string ContactName { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string Country { get; set; }
}
|
A seguir na pasta Models cria a classe de contexto NorthwindContext que vai herdar de DbContext:
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.Extensions.Logging;
using System;
namespace EFCore5_Logging1.Models
{
public class NorthwindContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseSqlServer(@"Data Source=-***\sqlexpress;Initial Catalog=Northwind;Integrated Security=True");
}
public virtual DbSet<Customer> Customers { get; set; }
}
}
|
No arquivo de contexto estamos definindo no método OnConfiguring o provedor para o SQL Server e a string de conexão com o banco de dados Northwind.
A seguir definimos o mapeamento da entidade Customer para tabela Customers usando o DbSet<>.
Agora para exibir o log no console podemos usa método LogTo() conforme mostrado a seguir:
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.Extensions.Logging;
using System;
namespace EFCore5_Logging1.Models
{
public class NorthwindContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.LogTo(Console.WriteLine)
.UseSqlServer(@"Data Source=desktop-\sqlexpress;Initial Catalog=Northwind;Integrated Security=True");
}
public virtual DbSet<Customer> Customers { get; set; }
}
}
|
Agora podemos testar a exibição do log criando o código abaixo no arquivo Program que realiza uma consulta com base no nome do país informado e lista o código e nome do contato do cliente a partir da tabela Customers:
class Program
{
static void Main(string[] args)
{
WriteLine("Informe o Pais :");
var pais = ReadLine();
using (var context = new Models.NorthwindContext())
{
var customers = context
.Customers
.Where(c => c.Country == pais)
.ToList();
WriteLine($"Clientes do :{pais} \n");
foreach (var customer in customers)
WriteLine($"{customer.CustomerId} - {customer.ContactName}");
}
ReadLine();
}
}
|
Nota: Podemos usar o novo recurso do .NET 5.0 chamado Top Level Statements e dispensar o uso da classe Program e o do método Main:
using System.Linq; using static System.Console; WriteLine("Informe o Pais :"); var pais = ReadLine(); using (var context = new EFCore5_Logging1.Models.NorthwindContext()) { var customers = context .Customers .Where(c => c.Country == pais) .ToList(); WriteLine($"Clientes do :{pais} \n"); foreach (var customer in customers) WriteLine($"{customer.CustomerId} - {customer.ContactName}"); } ReadLine(); |
Executando o projeto poderemos ver no console o log gerado conforme figura baixo:
Muita informação !!!
Podemos usar várias sobrecargas para personalizar o log, por exemplo, para registrar apenas eventos na categoria de banco de dados e definir opções para formatar a saída.
Para isso vamos alterar a configuração no arquivo NorthwindContext:
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.Extensions.Logging;
using System;
namespace EFCore5_Logging1.Models
{
public class NorthwindContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.LogTo(Console.WriteLine,
new[]
{
DbLoggerCategory.Database.Command.Name
},
LogLevel.Information,
DbContextLoggerOptions.SingleLine | DbContextLoggerOptions.UtcTime)
.UseSqlServer(@"Data Source=desktop-bhp8771\sqlexpress;Initial Catalog=Northwind;Integrated Security=True");
}
public virtual DbSet<Customer> Customers { get; set; }
}
}
|
Agora ao executar o projeto teremos o seguinte resultado:
Lembrando que o EF Core 5.0 é uma biblioteca do .NET Standard 2.1 e não pode ser usado no .NET Framework.
Simples assim...
Pegue o projeto aqui : EFCore5_Logging1.zip (sem as referências)
Aquele que crê
no Filho (Jesus) tem a vida eterna; mas aquele que não crê no Filho não verá a
vida, mas a ira de Deus sobre ele permanece.
João 3:36
Referências:
EF Core - Iniciando com o Entity Framework Core
Core - Usando o EF Core com Windows Forms ...
ASP .NET Core - Acessando dados com Entity ...
EF Core - Conceitos Básicos - Macoratti
EF Core - Usando a abordagem DataBase First ..
EF Core 2.0 - Scaffolding DbContext e Models ...
Curso Entity Framework Core 2.0 - Vídeo Aulas