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.