Kerangka Kerja Entitas - Pencatatan Perintah

Dalam Entity Framework 6.0, fitur baru diperkenalkan yang dikenal sebagai Logging SQL. Saat bekerja dengan Entity Framework, ia mengirimkan perintah atau kueri SQL yang setara ke database untuk melakukan operasi CRUD (Buat, Baca, Perbarui, dan Hapus).

  • Fitur Entity Framework ini adalah untuk menangkap kueri SQL setara yang dihasilkan oleh Entity Framework secara internal dan menyediakannya sebagai keluaran.

  • Sebelum Entity Framework 6, setiap kali ada kebutuhan untuk melacak kueri dan perintah database, pengembang tidak memiliki pilihan selain menggunakan beberapa utilitas pelacakan pihak ketiga atau alat pelacakan database.

  • Di Entity Framework 6, fitur baru ini menyediakan cara sederhana dengan mencatat semua operasi yang dilakukan oleh Entity Framework.

  • Semua aktivitas yang dilakukan oleh Entity Framework dicatat menggunakan DbContext.Database.Log.

Mari kita lihat kode berikut di mana siswa baru ditambahkan ke database.

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();
      }
   }
}

Ketika kode di atas dijalankan, Anda akan menerima output berikut, yang sebenarnya merupakan log dari semua aktivitas yang dilakukan oleh EF pada kode di atas.

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

Ketika properti Log disetel, aktivitas berikut dicatat -

  • SQL untuk semua jenis perintah yang berbeda misalnya Kueri, termasuk penyisipan, pembaruan, dan penghapusan yang dihasilkan sebagai bagian dari SaveChanges

  • Parameters

  • Apakah perintah dijalankan secara asinkron atau tidak

  • Stempel waktu yang menunjukkan kapan perintah mulai dijalankan

  • Perintah berhasil diselesaikan atau gagal

  • Beberapa indikasi nilai hasil

  • Perkiraan jumlah waktu yang dibutuhkan untuk menjalankan perintah

Masuk ke Tempat Lain

Jika Anda sudah memiliki beberapa kerangka kerja logging dan itu mendefinisikan metode logging maka Anda juga bisa memasukkannya ke tempat lain.

Mari kita lihat contoh berikut di mana kita memiliki kelas MyLogger lainnya.

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);
   }
}

Kami menyarankan Anda untuk menjalankan contoh di atas dengan cara langkah demi langkah untuk pemahaman yang lebih baik.