asp.net – 如何跟踪Linq-to-sql DataContext上的查询

前端之家收集整理的这篇文章主要介绍了asp.net – 如何跟踪Linq-to-sql DataContext上的查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
herding code播客14中,有人提到stackoverflow显示页面底部的请求期间执行的查询.

这听起来对我来说是个好主意.每次页面加载时我都想知道执行什么sql语句,以及DB往返总数的计数.
有没有人有这个问题的巧妙解决方案?

您认为可接受的查询数量是多少?我在想,在开发过程中,如果需要超过30个查询来呈现页面,我可能会让我的应用程序抛出异常.

编辑:我想我一定不能清楚地解释我的问题.在HTTP请求期间,Web应用程序可能会执行十几个或更多sql语句.我希望将这些语句附加到页面底部,以及语句数量的计数.

这是我的解决方案:

我创建了一个DataContext可以写入的TextWriter类:

  1. public class Logger : StreamWriter
  2. {
  3. public string Buffer { get; private set; }
  4. public int QueryCounter { get; private set; }
  5.  
  6. public Logger() : base(new MemoryStream())
  7. {}
  8.  
  9. public override void Write(string value)
  10. {
  11. Buffer += value + "<br/><br/>";
  12. if (!value.StartsWith("--")) QueryCounter++;
  13. }
  14.  
  15. public override void WriteLine(string value)
  16. {
  17. Buffer += value + "<br/><br/>";
  18. if (!value.StartsWith("--")) QueryCounter++;
  19. }
  20. }

在DataContext的构造函数中,我设置了记录器:

  1. public HeraldDBDataContext()
  2. : base(ConfigurationManager.ConnectionStrings["Herald"].ConnectionString,mappingSource)
  3. {
  4. Log = new Logger();
  5. }

最后,我使用Application_OnEndRequest事件将结果添加页面底部

  1. protected void Application_OnEndRequest(Object sender,EventArgs e)
  2. {
  3. Logger logger = DataContextFactory.Context.Log as Logger;
  4. Response.Write("Query count : " + logger.QueryCounter);
  5. Response.Write("<br/><br/>");
  6. Response.Write(logger.Buffer);
  7. }

解决方法

如果将.ToString()放到var查询变量中,则会得到sql.你可以在Debug en VS2008中使用它. Debug Visualizer

例如:

  1. var query = from p in db.Table
  2. select p;
  3.  
  4. MessageBox.SHow(query.ToString());

猜你在找的asp.Net相关文章