有什么方法可以查看DataContext
运行了多少个数据库查询?
我知道我可以运行sql profiler
,但我想分析一个包含数百个查询的大型项目。
如果没有,是否有任何有用的事件我可以注册并计算它们?
我正在寻找类似的东西:
using(DataContext ctx = new DataContext(connectionString))
{
// Add load options
// execute a query
// I want information about the number of actual sql queries that ran using this context.
// Adding "1 to many" loadoptions or complex queries can create multiple sub-queries and that's why I want this info.
}
答案 0 :(得分:3)
在LINQ to SQL中,您可以选择将生成的SQL记录到TextWriter
。例如,您可以登录控制台:
ctx.Log = Console.Out;
这不会给你一些查询,但它会为你提供实际执行的SQL,这可能会让你更好地了解正在发生的事情。
如果您想提供一个聚合视图,说明选择语句的数量,您可以登录到StringWriter
,然后使用正则表达式来计算单词SELECT
的出现次数:
var stringWriter = new StringWriter();
ctx.Log = stringWriter;
// Use DataContext referenced by ctx ...
var regex = new Regex(@"\bSELECT\b");
var selectCount = regex.Matches(stringWriter.ToString()).Count;
显然,您可能还需要计算其他字词,例如INSERT
,UPDATE
和DELETE
,如果您说WHERE
条款包含SELECT
,则可能会遇到问题。单词var regex = new Regex(@"^-- Context: ", RegexOptions.Multiline);
var statementCount = regex.Matches(stringWriter.ToString()).Count;
。
您可以计算执行的SQL语句数,而不是尝试“理解”SQL来进行计数。每个语句以我的测试中具有以下格式的行结束:
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.34209
您可以创建一个正则表达式来匹配此字符串:
{{1}}