Кто-нибудь имел успех в профилировании своих запросов Subsonic sql с помощью MvcMiniProfiler? Кажется, я не могу найти, где именно в Subsonic подключиться к процессу создания SqlConnection.Профилирование Subsonic SQL с MvcMiniProfiler
ответ
Я никогда не найти действительно отличный способ сделать это, но я нашел то, что работал. Я не мог подклассифицировать класс SubSonic.DataProviders.DbDataProvider, поскольку конструктор был «внутренним» (не удивительным). Поэтому я просто скопировал исходный код в свой проект и внес несколько изменений.
Основная строка кода, которая должна быть изменена, находится в методе «CreateConnection», ей необходимо вернуть ProfiledDbConnection.
public DbConnection CreateConnection(string connectionString)
{
DbConnection conn = Factory.CreateConnection();
conn.ConnectionString = connectionString;
if(conn.State == ConnectionState.Closed) conn.Open();
return conn;
}
Поскольку соединения больше не SqlConnection так это вызвало ошибку произнесения в некоторых из существующего кода. Чтобы исправить это, я изменил метод «ExecuteDataSet», чтобы использовать соединение из области действия вместо фабрики.
public DataSet ExecuteDataSet(QueryCommand qry)
{
if (Log != null)
Log.WriteLine(qry.CommandSql);
#if DEBUG
//Console.Error.WriteLine("ExecuteDataSet(QueryCommand): {0}.", qry.CommandSql);
#endif
using (AutomaticConnectionScope scope = new AutomaticConnectionScope(this))
{
DbCommand cmd = scope.Connection.CreateCommand();
cmd.CommandText = qry.CommandSql;
cmd.CommandType = qry.CommandType;
DataSet ds = new DataSet();
cmd.Connection = scope.Connection;
AddParams(cmd, qry);
DbDataAdapter da = Factory.CreateDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds);
return ds;
}
}
Я также изменил метод «ExecuteScalar», чтобы использовать область подключения.
public object ExecuteScalar(QueryCommand qry)
{
if (Log != null)
Log.WriteLine(qry.CommandSql);
#if DEBUG
//Console.Error.WriteLine("ExecuteScalar(QueryCommand): {0}.", qry.CommandSql);
//foreach (var param in qry.Parameters) {
// if(param.ParameterValue==null)
// Console.Error.WriteLine(param.ParameterName + " = NULL");
// else
// Console.Error.WriteLine(param.ParameterName + " = " + param.ParameterValue.ToString());
//}
#endif
object result;
using (AutomaticConnectionScope automaticConnectionScope = new AutomaticConnectionScope(this))
{
DbCommand cmd = automaticConnectionScope.Connection.CreateCommand();
cmd.Connection = automaticConnectionScope.Connection;
cmd.CommandType = qry.CommandType;
cmd.CommandText = qry.CommandSql;
AddParams(cmd, qry);
result = cmd.ExecuteScalar();
}
return result;
}
Все, кажется, работает сейчас. В настоящее время я использую IOC для определения того, использует ли сам класс базы данных этот ProfilingDbDataProvider или существующий DbDataProvider. Я изменил это в генерации кода класса Context, чтобы извлечь из IOC вместо использования ProviderFactory.
Надеюсь, что это поможет кому-то еще.
- 1. Может ли MvcMiniProfiler отображать значения параметров SQL?
- 2. Использование SQL DSN с SubSonic
- 3. SubSonic с MS SQL 2008?
- 4. SubSonic эквивалента обновления SQL
- 5. SubSonic и SQL Azure
- 6. Ошибка SubSonic SQL CE
- 7. Заявление SQL для Subsonic Query
- 8. Вычисляемые столбцы в SQL Server с Subsonic
- 9. Subsonic 3.0.0.3 SQL-пейджинг с использованием Linq
- 10. SQL-профилирование приложения WCF с использованием IIS
- 11. SubSonic Как выполнить инструкцию SQL?
- 12. Получение журнала SQL SubSonic использует
- 13. Sql Injection Attacks and Subsonic
- 14. Извлечь SQL из Subsonic 3
- 15. SQL Views в SubSonic 3.0
- 16. Оптимизация и профилирование запросов Sql
- 17. Профилирование
- 18. MVCMiniProfiler не показывает часть WHERE Linq Query
- 19. Результаты MvcMiniProfiler/chicklets скрыты/закрыты DIV
- 20. MvcMiniProfiler Невозможно создать объект типа EFProfiledDbConnection
- 21. Возможно использование Subsonic и SQL Azure?
- 22. Subsonic ActiveRecord и SQL Server Express
- 23. Ошибка SubSonic с MySql CONVERT()
- 24. Django профилирование
- 25. Индивидуальные отношения с Subsonic
- 26. Использование Subsonic с Firebird
- 27. SubSonic ORM с backbone.js
- 28. Filterable DataGrid с SubSonic
- 29. Пейджинг с SubSonic
- 30. Ошибка с SubSonic 2.0.3