Entity Framework - Eşzamansız Sorgu
Asynchronous programmingAna iş parçacığının kendi işlemlerine devam edebilmesi için arka planda işlemlerin yürütülmesini içerir. Bu şekilde, ana iş parçacığı, arka plan iş parçacığı eldeki görevi işlerken kullanıcı arabirimini duyarlı tutabilir.
Entity Framework 6.0, verilerin sorgulanması ve kaydedilmesi için zaman uyumsuz işlemleri destekler.
Eşzamansız işlemler uygulamanıza aşağıdaki şekillerde yardımcı olabilir:
- Uygulamanızı kullanıcı etkileşimlerine daha duyarlı hale getirin
- Uygulamanızın genel performansını iyileştirin
Eşzamansız işlemleri çeşitli şekillerde yürütebilirsiniz. Ancak async / await anahtar sözcükleri, işinizi basitleştiren .NET Framework 4.5'te tanıtılmıştır.
Takip etmeniz gereken tek şey, aşağıdaki kod parçasında gösterildiği gibi zaman uyumsuz / bekleme modelidir.
DatabaseOperations yönteminin yeni bir öğrenciyi veritabanına kaydettiği ve ardından tüm öğrencileri veritabanından aldığı ve sonunda konsolda bazı ek mesajların yazdırıldığı aşağıdaki örneğe (async / await kullanmadan) bir göz atalım.
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);
}
}
}
}
Yukarıdaki kod çalıştırıldığında, aşağıdaki çıktıyı alacaksınız -
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
Yeni async'i kullanalım ve anahtar kelimeleri bekleyelim ve Program.cs'de aşağıdaki değişiklikleri yapalım.
EF zaman uyumsuz uzantı yöntemlerini verecek System.Data.Entity ad alanını ekleyin.
Görev türünü kullanmamıza izin verecek System.Threading.Tasks ad alanını ekleyin.
Güncelleme DatabaseOperations olarak işaretlenmek async ve dön Task.
SaveChanges'ın Async sürümünü çağırın ve tamamlanmasını bekleyin.
ToList'in Async sürümünü çağırın ve sonucu bekleyin.
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);
}
}
}
}
Yürütme sırasında aşağıdaki çıktıyı üretecektir.
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
Artık kod eşzamansız olduğuna göre, programınızın farklı bir yürütme akışını gözlemleyebilirsiniz.
SaveChanges, yeni Student'ı veritabanına göndermeye başlar ve ardından DatabaseOperations yöntemi geri döner (yürütmeyi bitirmemiş olsa bile) ve Main yöntemindeki program akışı devam eder.
Mesaj daha sonra konsola yazılır.
Yönetilen iş parçacığı, veritabanı işlemi tamamlanıncaya kadar Bekle çağrısında engellenir. Tamamlandığında, Veritabanı İşlemlerimizin geri kalanı yürütülecektir.
SaveChanges tamamlandı.
Veritabanından tüm öğrenci alınır ve Konsola yazılır.
Daha iyi anlamak için yukarıdaki örneği adım adım uygulamanızı öneririz.