Entity Framework - Asynchrone Abfrage
Asynchronous programmingbeinhaltet das Ausführen von Operationen im Hintergrund, damit der Hauptthread seine eigenen Operationen fortsetzen kann. Auf diese Weise kann der Hauptthread die Benutzeroberfläche reaktionsfähig halten, während der Hintergrundthread die vorliegende Aufgabe verarbeitet.
Entity Framework 6.0 unterstützt asynchrone Vorgänge zum Abfragen und Speichern von Daten.
Asynchrone Vorgänge können Ihrer Anwendung auf folgende Weise helfen:
- Machen Sie Ihre Anwendung reaktionsschneller für Benutzerinteraktionen
- Verbessern Sie die Gesamtleistung Ihrer Anwendung
Sie können asynchrone Vorgänge auf verschiedene Arten ausführen. In .NET Framework 4.5 wurden jedoch asynchrone / warten-Schlüsselwörter eingeführt, die Ihre Arbeit vereinfachen.
Das einzige, was Sie befolgen müssen, ist das asynchrone / wartende Muster, wie im folgenden Codefragment dargestellt.
Schauen wir uns das folgende Beispiel an (ohne async / await zu verwenden), in dem die DatabaseOperations-Methode einen neuen Schüler in der Datenbank speichert und dann alle Schüler aus der Datenbank abruft. Am Ende wird eine zusätzliche Nachricht auf der Konsole gedruckt.
class Program {
static void Main(string[] args) {
Console.WriteLine("Database Operations Started");
DatabaseOperations();
Console.WriteLine();
Console.WriteLine("Database Operations Completed");
Console.WriteLine();
Console.WriteLine("Entity Framework Tutorials");
Console.ReadKey();
}
public static void DatabaseOperations() {
using (var context = new UniContextEntities()) {
// Create a new student and save it
context.Students.Add(new Student {
FirstMidName = "Akram",
LastName = "Khan",
EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())});
Console.WriteLine("Calling SaveChanges.");
context.SaveChanges();
Console.WriteLine("SaveChanges completed.");
// Query for all Students ordered by first name
var students = (from s in context.Students
orderby s.FirstMidName select s).ToList();
// Write all students out to Console
Console.WriteLine();
Console.WriteLine("All Student:");
foreach (var student in students) {
string name = student.FirstMidName + " " + student.LastName;
Console.WriteLine(" " + name);
}
}
}
}
Wenn der obige Code ausgeführt wird, erhalten Sie die folgende Ausgabe:
Calling SaveChanges.
SaveChanges completed.
All Student:
Akram Khan
Ali Khan
Ali Alexander
Arturo Anand
Bill Gates
Gytis Barzdukas
Laura Nornan
Meredith fllonso
Nino Olioetto
Peggy Justice
Yan Li
Entity Framework Tutorials
Verwenden wir die neue asynchrone Funktion, warten auf Schlüsselwörter und nehmen die folgenden Änderungen an Program.cs vor
Fügen Sie den System.Data.Entity-Namespace hinzu, der asynchrone EF-Erweiterungsmethoden bereitstellt.
Fügen Sie den Namespace System.Threading.Tasks hinzu, mit dem wir den Aufgabentyp verwenden können.
Aktualisieren DatabaseOperations markiert werden als async und zurück a Task.
Rufen Sie die Async-Version von SaveChanges auf und warten Sie auf deren Abschluss.
Rufen Sie die Async-Version von ToList auf und warten Sie auf das Ergebnis.
class Program {
static void Main(string[] args) {
var task = DatabaseOperations();
Console.WriteLine();
Console.WriteLine("Entity Framework Tutorials");
task.Wait();
Console.ReadKey();
}
public static async Task DatabaseOperations() {
using (var context = new UniContextEntities()) {
// Create a new blog and save it
context.Students.Add(new Student {
FirstMidName = "Salman",
LastName = "Khan",
EnrollmentDate = DateTime.Parse(DateTime.Today.ToString())});
Console.WriteLine("Calling SaveChanges.");
await context.SaveChangesAsync();
Console.WriteLine("SaveChanges completed.");
// Query for all Students ordered by first name
var students = await (from s in context.Students
orderby s.FirstMidName select s).ToListAsync();
// Write all students out to Console
Console.WriteLine();
Console.WriteLine("All Student:");
foreach (var student in students) {
string name = student.FirstMidName + " " + student.LastName;
Console.WriteLine(" " + name);
}
}
}
}
Bei der Ausführung wird die folgende Ausgabe erzeugt.
Calling SaveChanges.
Entity Framework Tutorials
SaveChanges completed.
All Student:
Akram Khan
Ali Khan
Ali Alexander
Arturo Anand
Bill Gates
Gytis Barzdukas
Laura Nornan
Meredith fllonso
Nino Olioetto
Peggy Justice
Salman Khan
Yan Li
Jetzt, da der Code asynchron ist, können Sie einen anderen Ausführungsfluss Ihres Programms beobachten.
SaveChanges beginnt, den neuen Student in die Datenbank zu verschieben, und dann kehrt die DatabaseOperations-Methode zurück (obwohl die Ausführung noch nicht abgeschlossen ist), und der Programmablauf in der Main-Methode wird fortgesetzt.
Die Nachricht wird dann in die Konsole geschrieben.
Der verwaltete Thread wird beim Wait-Aufruf blockiert, bis der Datenbankvorgang abgeschlossen ist. Sobald dies abgeschlossen ist, wird der Rest unserer DatabaseOperations ausgeführt.
SaveChanges ist abgeschlossen.
Der gesamte Schüler wurde aus der Datenbank abgerufen und in die Konsole geschrieben.
Wir empfehlen, dass Sie das obige Beispiel zum besseren Verständnis Schritt für Schritt ausführen.