niedziela, 8 marca 2015

[c#] Entity Framework - Wypisanie wygenerowanych zapytań na ekran

Nie raz podczas pracy z Entity Framework chcemy podejrzeć jak wyglądają wygenerowane zapytania SQL. Może coś nie działa jak tego byśmy chcieli, lub szukamy sposobu optymalizacji zapytania. Na szczęście Entity Framework został bardzo dobrze przemyślany i takie podglądnięcie wygenerowanego/surowego sqla nie stanowi żadnego problemu:

using(var content = new DatabaseContext())

{
  context.Database.Log = Console.Write;
  var user = context.Users.First(); // na ekran trafi wygenerowany select wyciągający pierwszego usera z tablicy
}
 
prawda, że proste? A co jeśli chcielibyśmy zapisywać sobie te zapytania do pliku, aby np. móc przewkleić je do jakiegoś managera SQL w celu analizy? Chłopaki od Entity Frameworka, też o tym pomyśleli:

1) Najpierw trzeba utworzyć swojego Loggera (nic trudnego)

public class Logger
{
  public void Log(string message)
  {
    // w tym miejscu można użyć dowolnej biblioteki do logowania np. log4net, nlog etc
    File.AppendAllText("log.txt", message + Environment.NewLine); 
  }
}

2) Następnie podczepiamy loggera do contextu:

var logger = new Logger();
context.Database.Log = sql => logger.Log(sql);

Gotowe, możemy teraz się cieszyć zapisanym sqlem w logu.

Brak komentarzy: