Entity Framework: registrazione dei comandi
In Entity Framework 6.0, viene introdotta una nuova funzionalità nota come Logging SQL. Mentre lavora con Entity Framework, invia comandi o una query SQL equivalente al database per eseguire operazioni CRUD (creazione, lettura, aggiornamento ed eliminazione).
- Questa funzionalità di Entity Framework consiste nell'acquisire una query SQL equivalente generata internamente da Entity Framework e fornirla come output. 
- Prima di Entity Framework 6, ogni volta che era necessario tracciare query e comandi del database, lo sviluppatore non aveva altra scelta che utilizzare un'utilità di traccia di terze parti o uno strumento di traccia del database. 
- In Entity Framework 6, questa nuova funzionalità fornisce un modo semplice registrando tutte le operazioni eseguite da Entity Framework. 
- Tutte le attività eseguite da Entity Framework vengono registrate utilizzando DbContext.Database.Log. 
Diamo un'occhiata al seguente codice in cui un nuovo studente viene aggiunto al database.
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 il codice sopra viene eseguito, riceverai il seguente output, che in realtà è il registro di tutte le attività eseguite da EF nel codice sopra.
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:00Quando la proprietà Log è impostata, vengono registrate le seguenti attività:
- SQL per tutti i diversi tipi di comandi, ad es. Query, inclusi inserimenti, aggiornamenti ed eliminazioni generati come parte di SaveChanges 
- Parameters 
- Indica se il comando viene eseguito in modo asincrono 
- Un timestamp che indica quando è iniziata l'esecuzione del comando 
- Il comando è stato completato correttamente o non è riuscito 
- Qualche indicazione del valore del risultato 
- Il tempo approssimativo impiegato per eseguire il comando 
Accesso in un altro luogo
Se si dispone già di un framework di registrazione e definisce un metodo di registrazione, è possibile anche registrarlo in un altro posto.
Diamo un'occhiata al seguente esempio in cui abbiamo un'altra 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);
   }
}Si consiglia di eseguire l'esempio precedente in modo graduale per una migliore comprensione.