gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:58:47 25 4
gpt4 key购买 nike

herding code Podcast 14 有人提到,stackoverflow 在页面底部显示了在请求期间执行的查询。

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

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

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

这是我的解决方案:

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

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

在 DataContext 的构造函数中,我设置了记录器:
public HeraldDBDataContext()
: base(ConfigurationManager.ConnectionStrings["Herald"].ConnectionString, mappingSource)
{
Log = new Logger();
}

最后,我使用了 Application_OnEndRequest将结果添加到页面底部的事件:
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);
}

最佳答案

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

前任:

var query = from p in db.Table
select p;

MessageBox.SHow(query.ToString());

关于asp.net - 如何跟踪对 Linq-to-sql DataContext 的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com