Entity Framework - registro de comando
No Entity Framework 6.0, um novo recurso é introduzido, conhecido como Logging SQL. Ao trabalhar com o Entity Framework, ele envia comandos ou uma consulta SQL equivalente ao banco de dados para fazer operações CRUD (Criar, Ler, Atualizar e Excluir).
Este recurso do Entity Framework é capturar uma consulta SQL equivalente gerada pelo Entity Framework internamente e fornecê-la como saída.
Antes do Entity Framework 6, sempre que havia a necessidade de rastrear consultas e comandos de banco de dados, o desenvolvedor não tinha opção a não ser usar algum utilitário de rastreamento de terceiros ou ferramenta de rastreamento de banco de dados.
No Entity Framework 6, esse novo recurso fornece uma maneira simples de registrar todas as operações realizadas pelo Entity Framework.
Todas as atividades realizadas pelo Entity Framework são registradas usando DbContext.Database.Log.
Vamos dar uma olhada no código a seguir, no qual um novo aluno é adicionado ao banco de dados.
class Program {
static void Main(string[] args) {
using (var context = new UniContextEntities()) {
context.Database.Log = Console.Write;
// Create a new student and save it
context.Students.Add(new Student {
FirstMidName = "Salman",
LastName = "Khan",
EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())
});
context.SaveChanges();
Console.ReadKey();
}
}
}
Quando o código acima for executado, você receberá a seguinte saída, que na verdade é o log de todas as atividades realizadas pelo EF no código acima.
Opened connection at 10/28/2015 6:27:35 PM +05:00
Started transaction at 10/28/2015 6:27:35 PM +05:00
INSERT [dbo].[Student]([LastName], [FirstMidName], [EnrollmentDate])
VALUES (@0, @1, @2)
SELECT [ID]
FROM [dbo].[Student]
WHERE @@ROWCOUNT > 0 AND [ID] = scope_identity()
-- @0: 'Khan' (Type = String, Size = -1)
-- @1: 'Salman' (Type = String, Size = -1)
-- @2: '10/28/2015 12:00:00 AM' (Type = DateTime)
-- Executing at 10/28/2015 6:27:35 PM +05:00
-- Completed in 5 ms with result: SqlDataReader
Committed transaction at 10/28/2015 6:27:35 PM +05:00
Closed connection at 10/28/2015 6:27:35 PM +05:00
Quando a propriedade Log é definida, as seguintes atividades são registradas -
SQL para todos os diferentes tipos de comandos, por exemplo, consultas, incluindo inserções, atualizações e exclusões geradas como parte de SaveChanges
Parameters
Se o comando está sendo executado de forma assíncrona ou não
Um carimbo de data / hora indicando quando o comando começou a ser executado
O comando foi concluído com sucesso ou falhou
Alguma indicação do valor do resultado
A quantidade aproximada de tempo necessária para executar o comando
Registrando em outro lugar
Se você já tem alguma estrutura de registro e ela define um método de registro, você também pode registrá-lo em outro lugar.
Vamos dar uma olhada no exemplo a seguir, no qual temos outra classe MyLogger.
class Program {
static void Main(string[] args) {
using (var context = new UniContextEntities()) {
context.Database.Log = s ⇒ MyLogger.Log("EFLoggingDemo", s);
// Create a new student and save it
context.Students.Add(new Student {
FirstMidName = "Salman",
LastName = "Khan",
EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())
});
context.SaveChanges();
Console.ReadKey();
}
}
}
public class MyLogger {
public static void Log(string application, string message) {
Console.WriteLine("Application: {0}, EF Message: {1} ",application, message);
}
}
Recomendamos que você execute o exemplo acima passo a passo para melhor compreensão.