В LINQ к 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
.
Вместо того, чтобы пытаться «понять» SQL, чтобы сделать счет, вы можете подсчитать количество выполненных SQL-операторов. Каждый оператор заканчивается линией, которая в моих тестах имеют следующий формат:
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.34209
Вы можете создать регулярное выражение, чтобы соответствовать этой строки:
var regex = new Regex(@"^-- Context: ", RegexOptions.Multiline);
var statementCount = regex.Matches(stringWriter.ToString()).Count;
Отъезд инструменты, такие как: Miniprofiler HTTP: // miniprofiler .com/ – jessehouwing
@jessehouwing - Спасибо за подсказку. Я проверю внешний пакет, если в доме нет возможности сделать это. Я бы ожидал, что структура предоставит мне эту информацию так или иначе. –
посмотрите на код miniprofiler, чтобы посмотреть, как они это делают. Https://github.com/MiniProfiler/dotnet/tree/master/StackExchange.Profiling.EntityFramework6 – jessehouwing