MvcMiniProfilerでSubsonicのSQLクエリをプロファイリングすることに成功した人は誰ですか?私はSonicConnectionの作成プロセスにSubsonicがどこに接続するかを正確に見つけることはできないようです。MvcMiniProfilerでSubsonic SQLをプロファイリング
3
A
答えて
1
私はこれを行うには本当に素晴らしい方法を見つけることはなかったが、私は働いていた何かを見つけました。コンストラクタが "内部"(素晴らしいものではない)だったので、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;
}
ConnectionはもはやSqlConnectionではないため、既存のコードの一部でキャストエラーが発生しました。これらを修正するために、 "ExecuteDataSet"メソッドを変更して、ファクトリの代わりにスコープからConnectionを使用しました。
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"メソッドをスコープConnectionを使用するように変更しました。
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クラスのコード生成でこれを変更して、ProviderFactoryを使用する代わりにIOCから引き出しました。
他人を助ける希望。
関連する問題
- 1. MvcMiniProfilerでエンティティフレームワークをプロファイリング
- 2. MvcMiniProfilerはSQLパラメータ値を表示できますか?
- 3. Dapper with MVCMiniProfiler
- 4. SubSonicとMS SQL Server Compact - データプロバイダ
- 5. MvcMiniProfiler on EF 4.1コードファーストプロジェクトはSQLをプロファイルしません
- 6. SQLプロファイリングについて
- 7. mvcMiniProfilerが表示されません
- 8. SubSonicスキーマエラー
- 9. Subsonic postgreSQLテンプレート
- 10. Windows Mobile 5でSubsonic 2.2をSQL Server CE 3.5に使用
- 11. v8でnodejsをプロファイリング
- 12. Firefoxでウェブワーカーをプロファイリング
- 13. NetBeansでのプロファイリング
- 14. スタックでのプロファイリング
- 15. SubSonic 2.2 "Version" Error
- 16. Subsonic 3.0 Left Join
- 17. SubSonic CreatedBy
- 18. SubSonic 2.2のOracleストアドプロシージャ
- 19. MvcMiniProfilerタイプEFProfiledDbConnectionのオブジェクトをキャストできません
- 20. SubSonic SqlQueryオブジェクトをプレーンSQLに変換する拡張メソッド
- 21. MacでのC++プロファイリング
- 22. HashMapプロファイリング
- 23. Djangoプロファイリング
- 24. PyCharmでDjangoをプロファイリングする
- 25. コンピューティングエミュレータでAzureをプロファイリングする
- 26. 2.6 Linuxカーネルでプロファイリングをロック
- 27. asp.net subsonic 2.2ページングリンクテーブルコレクション
- 28. Filtering DataGrid with SubSonic
- 29. Subsonic 3.0.0.3 Crash
- 30. Subsonic 3.0とSqlHierachyID