1

今日、私は過去 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 プロファイリングを構成するにはどうすればよいですか? 私はドキュメンテーションを通して高低を掘り下げていますが、古い方法と新しい方法が混在している情報が非常に多く、今日の「正しい」方法を区別するのに苦労しています.

4

1 に答える 1

2

うーん、ごめんなさい。

問題を解決しました。

データ モデル プロジェクトに EF MVCMiniProfiler NuGet パッケージを追加し、接続タイプを EFProfiledConnection に変更する必要がありました。

        /// <summary>
    /// Supply our own connection string to the DBContext to utilize mini-profiler for SQL queries as well.
    /// </summary>
    /// <returns>DBConnection</returns>
    private static DbConnection GetProfilerConnection()
    {
        return new EFProfiledDbConnection(new SqlConnection(ConfigurationManager.ConnectionStrings["Database"].ConnectionString),
                                        MiniProfiler.Current);
    }

EFが独自の接続タイプにどのように分割されたかを見ると、それは明らかだったはずです。

また、構成設定が不要になったことを確認できるように、構成設定をコメントアウトしました。

これが EF と MVC Mini 1.9 を構成する「正しい」方法であるかどうかはわかりませんが、機能します。

改善に関する提案や、これを行うためのより正しい方法があるかどうかについてはオープンですが、今のところ、バックアップして再び実行しています.

于 2011-10-05T19:51:16.617 に答える