有什么方法可以检查 DataContext
运行了多少数据库查询?
我知道我可以运行 sql 分析器
,但我想分析一个包含数百个查询的大项目。
如果没有,是否有任何有用的事件我可以注册并计算它们?
我正在寻找这样的东西:
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.
}
最佳答案
在 LINQ to SQL 中,您可以选择将生成的 SQL 记录到 TextWriter
。例如,您可以登录到控制台:
ctx.Log = Console.Out;
这不会为您提供查询计数,但会为您提供实际执行的 SQL,这可能会让您更好地了解正在发生的事情。
如果您想提供一个聚合 View ,例如您可以记录到 StringWriter
的 select 语句的数量,然后使用正则表达式来计算单词 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
,如果您有说一个包含单词 SELECT
的 WHERE
子句。
您可以计算执行的 SQL 语句的数量,而不是试图“理解”SQL 来进行计数。每条语句以一行结尾,在我的测试中具有以下格式:
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.34209
You can create a regular expression to match this string:
var regex = new Regex(@"^-- Context: ", RegexOptions.Multiline);
var statementCount = regex.Matches(stringWriter.ToString()).Count;
关于c# - 如何检查 LinqToSql DataContext 运行了多少查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28714387/