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.