EF 6 - Các lệnh lưu vết DB
Lưu vết các lệnh cơ sở dữ liệu trong EF 6
Trong phần này, chúng ta sẽ học cách lưu vết các lệnh & truy vấn được Entity Framework 6 gửi đến cơ sở dữ liệu.
Các phiên bản trước EF 6, chúng ta đã sử dụng công cụ theo dõi cơ sở dữ liệu hoặc tiện ích theo dõi bên thứ ba để theo dõi các truy vấn và lệnh cơ sở dữ liệu được gửi bởi Entity Framework. Bây giờ, EF 6 cung cấp đối tượng DbContext.Database.Log để ghi lưu vết SQL được tạo bởi DbContext.
Thuộc tính Log thuộc loại Action <string>, vì vậy bạn có thể đính kèm phương thức delegate có tham số chuỗi và trả về void.
Ví dụ sau minh họa việc lưu vết các hoạt động EF vào bảng console.
using (var context = new SchoolDBEntities())
{
context.Database.Log = Console.Write;
var student = context.Students
.Where(s => s.StudentName == "Student1")
.FirstOrDefault<Student>();
student.StudentName = "Edited Name";
context.SaveChanges();
}
Kết quả:
Trong ví dụ trên, phương thức Console.Write () được gán vào thuộc tính Log vì nó chấp nhận tham số chuỗi và trả về void. Bạn có thể thấy kết quả nó ghi lại tất cả các hoạt động được thực hiện bởi EF, ví dụ: mở và đóng kết nối, thời gian thực hiện và hoàn thành và các truy vấn & lệnh cơ sở dữ liệu.
Ngoài ra, chúng ta cũng có thể tùy biến lại thuộc tính Log. Xem ví dụ sau:
public class Logger
{
public static void Log(string message)
{
Console.WriteLine("EF Message: {0} ", message);
}
}
class EF6Demo
{
public static void DBCommandLogging()
{
using (var context = new SchoolDBEntities())
{
context.Database.Log = Logger.Log;
var student = context.Students
.Where(s => s.StudentName == "Student1")
.FirstOrDefault<Student>();
student.StudentName = "Edited Name";
context.SaveChanges();
}
}
}