Entity Framework - Befehlsprotokollierung
In Entity Framework 6.0 wird eine neue Funktion eingeführt, die als bekannt ist Logging SQL. Während der Arbeit mit Entity Framework werden Befehle oder eine gleichwertige SQL-Abfrage an die Datenbank gesendet, um CRUD-Vorgänge (Erstellen, Lesen, Aktualisieren und Löschen) auszuführen.
Diese Funktion des Entity Framework besteht darin, eine von Entity Framework intern generierte äquivalente SQL-Abfrage zu erfassen und als Ausgabe bereitzustellen.
Vor Entity Framework 6 hatte der Entwickler keine andere Wahl, als Datenbankverfolgungsdienstprogramme oder Datenbankverfolgungstools von Drittanbietern zu verwenden, wenn Datenbankabfragen und -befehle nachverfolgt werden mussten.
In Entity Framework 6 bietet diese neue Funktion eine einfache Möglichkeit, indem alle von Entity Framework ausgeführten Vorgänge protokolliert werden.
Alle Aktivitäten, die von Entity Framework ausgeführt werden, werden mit DbContext.Database.Log protokolliert.
Schauen wir uns den folgenden Code an, in dem ein neuer Schüler zur Datenbank hinzugefügt wird.
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();
}
}
}
Wenn der obige Code ausgeführt wird, erhalten Sie die folgende Ausgabe, die eigentlich das Protokoll aller von EF im obigen Code ausgeführten Aktivitäten ist.
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
Wenn die Log-Eigenschaft festgelegt ist, werden die folgenden Aktivitäten protokolliert:
SQL für alle Arten von Befehlen, z. B. Abfragen, einschließlich Einfügungen, Aktualisierungen und Löschungen, die im Rahmen von SaveChanges generiert wurden
Parameters
Gibt an, ob der Befehl asynchron ausgeführt wird
Ein Zeitstempel, der angibt, wann der Befehl ausgeführt wurde
Der Befehl wurde erfolgreich ausgeführt oder ist fehlgeschlagen
Einige Angaben zum Ergebniswert
Die ungefähre Zeit, die zum Ausführen des Befehls benötigt wurde
An einem anderen Ort anmelden
Wenn Sie bereits über ein Protokollierungsframework verfügen und eine Protokollierungsmethode definiert, können Sie diese auch an einem anderen Ort protokollieren.
Schauen wir uns das folgende Beispiel an, in dem wir eine andere Klasse MyLogger haben.
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);
}
}
Wir empfehlen, dass Sie das obige Beispiel zum besseren Verständnis Schritt für Schritt ausführen.