Trong podcast herding code 14 ai đó đề cập rằng stackoverflow hiển thị các truy vấn được thực hiện trong một yêu cầu ở cuối trang.Cách theo dõi truy vấn trên dữ liệu LINQ to sql DataContext
Nghe có vẻ như là một ý tưởng tuyệt vời đối với tôi. Mỗi lần tải một trang, tôi muốn biết những câu lệnh sql nào được thực hiện và cũng là tổng số lượng các chuyến đi vòng DB. Có ai có giải pháp gọn gàng cho vấn đề này không?
Bạn nghĩ số truy vấn có thể chấp nhận là gì? Tôi đã nghĩ rằng trong quá trình phát triển, tôi có thể có ứng dụng của tôi ném một ngoại lệ nếu có hơn 30 truy vấn được yêu cầu để hiển thị một trang.
EDIT: Tôi nghĩ tôi không phải giải thích rõ ràng câu hỏi của mình. Trong một yêu cầu HTTP, một ứng dụng web có thể thực hiện một hoặc nhiều câu lệnh sql. Tôi muốn có các câu lệnh đó được thêm vào cuối trang, cùng với số lượng các câu lệnh.
ĐÂY LÀ GIẢI PHÁP CỦA TÔI:
Tôi tạo ra một lớp TextWriter rằng DataContext thể viết thư cho:
public class Logger : StreamWriter
{
public string Buffer { get; private set; }
public int QueryCounter { get; private set; }
public Logger() : base(new MemoryStream())
{}
public override void Write(string value)
{
Buffer += value + "<br/><br/>";
if (!value.StartsWith("--")) QueryCounter++;
}
public override void WriteLine(string value)
{
Buffer += value + "<br/><br/>";
if (!value.StartsWith("--")) QueryCounter++;
}
}
Trong thiết lập constructor tôi của DataContext các logger:
public HeraldDBDataContext()
: base(ConfigurationManager.ConnectionStrings["Herald"].ConnectionString, mappingSource)
{
Log = new Logger();
}
Cuối cùng, Tôi sử dụng sự kiện Application_OnEndRequest
để thêm kết quả vào cuối trang:
protected void Application_OnEndRequest(Object sender, EventArgs e)
{
Logger logger = DataContextFactory.Context.Log as Logger;
Response.Write("Query count : " + logger.QueryCounter);
Response.Write("<br/><br/>");
Response.Write(logger.Buffer);
}
Đã giúp tôi nhận: Db.Log = Console.Out; – Haroon