У меня похожая ситуация, когда весь наш SQL находится в хранимых процедурах, и у нас просто есть код ADO.NET, который вызывает их. У меня также есть слой доступа к данным, которым я доволен, поэтому мне не нравится идея переписывать его просто для размещения MiniProfiler.
Итак, компромисс, на котором я остановился, заключался в использовании стандартных MiniProfiler.Step()
вызовов вокруг вызовов процедур. В моем случае помогает, что все вызовы ExecuteReader()
и др. Являются частью базового класса, поэтому я знаю, что все SqlCommands выполняются в нескольких базовых методах, поэтому мой существующий код было легко изменить, чтобы он выглядел примерно так:
protected SqlDataReader ExecuteReader()
{
SqlDataReader reader = null;
// sqlComm is a member of a base class which this method is part of. I also
// happen to know that sqlComm.CommandText will always refer to a stored
// procedure name so it makes it easy to view in the results.
using (MiniProfiler.Current.Step(sqlComm.CommandText))
{
try
{
sqlConn.Open();
reader = sqlComm.ExecuteReader();
}
catch (SqlException exception)
{
sqlConn.Close();
// Error handling removed for brevity...
}
}
return reader;
}
Я уверен, что это не так хорошо, как ответ Сэма, так как я уверен, что некоторые детали будут отсутствовать на вкладке результатов, но это работает достаточно хорошо, чтобы я мог анализировать вызовы базы данных сейчас с очень небольшими изменениями в моем структура кода доступа к данным.