今日、私は過去 1 か月ほど作業していなかったプロジェクトに戻ってきました。MiniProfiler 1.7 を使用してこのプロジェクトを構成しましたが、すべてうまくいきました。DB 呼び出しとビューのパフォーマンスもプロファイリングしました。
1.9 にアップグレードすることにしましたが、いくつかのスピード バンプに遭遇しました。今、私はこの時点でほとんどの問題を解決しました。「間違っている」と思われる唯一のことは、DB プロファイリングです。次のエラーで黄色の死の画面が表示されます。
A null was returned after calling the 'get_ProviderFactory' method on a store
provider instance of type 'MvcMiniProfiler.Data.ProfiledDbConnection'.
The store provider might not be functioning correctly.
参考までに、1.7 で MVC3 と EF 4.1 Code First を使用して miniprofiler をセットアップした方法を紹介します。
web.config
<system.data>
<DbProviderFactories>
<remove invariant="MvcMiniProfiler.Data.ProfiledDbProvider" />
<add name="MvcMiniProfiler.Data.ProfiledDbProvider"
invariant="MvcMiniProfiler.Data.ProfiledDbProvider"
description="MvcMiniProfiler.Data.ProfiledDbProvider"
type="MvcMiniProfiler.Data.ProfiledDbProviderFactory, MvcMiniProfiler, Version=1.7.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" />
</DbProviderFactories>
Global.asax はそこからほとんどすべてを処理しました。以前は機能していたが現在は機能していない、関連する Application_Start() コードをリストします。
#region MVC Mini Profiler related database profiling config/setup
//This line makes SQL Formatting smarter so you can copy/paste
// from the profiler directly into Query Analyzer
MiniProfiler.Settings.SqlFormatter = new SqlServerFormatter();
var factory = new SqlConnectionFactory(ConfigurationManager.ConnectionStrings["Database"].ConnectionString);
var profiled = new ProfiledDbConnectionFactory(factory);
Database.DefaultConnectionFactory = profiled;
#endregion
最後のステップは、プロファイルされた接続にフックする私のコンテキストにあります:
public class Database : DbContext
{
public Database()
: base(GetProfilerConnection(), true)
{}
private static DbConnection GetProfilerConnection()
{
return
ProfiledDbConnection.Get(
new SqlConnection(ConfigurationManager.ConnectionStrings["Database"].ConnectionString));
}
}
今日まで早送りして、MVC3 minprofiler nuget パッケージと EF miniprofiler NuGet パッケージを使用するように作り直しましたが、DB プロファイリングを再び機能させる方法がわかりません。
web.config を次のように変更しましたが、これは必要なように見えましたが、ReSharper は最初から満足していません。
<system.data>
<DbProviderFactories>
<remove invariant="MvcMiniProfiler.Data.ProfiledDbProvider" />
<add name="MvcMiniProfiler.Data.ProfiledDbProvider" invariant="MvcMiniProfiler.Data.ProfiledDbProvider"
description="MvcMiniProfiler.Data.ProfiledDbProvider"
type="MvcMiniProfiler.Data.ProfiledDbProviderFactory, MvcMiniProfiler.EntityFramework, Version=1.9.1.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" />
</DbProviderFactories>
ここで何が欠けているのかよくわかりません。MiniProfilerEF.Initialize(); を呼び出して、これはもう必要ですか? いくつかのドキュメントと提案は、これがもう必要ないことを示しているようです。
より大きな問題は、1.9 で DB プロファイリングをセットアップする方法です。
以前 Global.asax にあった関連コードは、App_Start フォルダーの MiniProfiler.cs に移動されました。設定は同じだと思っていましたが、そうではないようです。
私はこれをしたいです (おそらく、これは私が 1.7 で慣れ親しんだものだからです)
//TODO: To profile a standard DbConnection:
var factory = new SqlConnectionFactory(ConfigurationManager.ConnectionStrings["Database"].ConnectionString);
var profiled = new ProfiledDbConnectionFactory(factory);
Database.DefaultConnectionFactory = profiled;
これはもはや機能していないようです。また、ProfiledDbConnection だけでなく、EFProfiledDbConnection を使用する必要があるように思われることにも注意しました。これは正しいです?
このモデルで DB プロファイリングを構成するにはどうすればよいですか? 私はドキュメンテーションを通して高低を掘り下げていますが、古い方法と新しい方法が混在している情報が非常に多く、今日の「正しい」方法を区別するのに苦労しています.