9

mvc-mini-profiler を使用する asp.net プロジェクトがあります。NuGet パッケージのバージョン 1.7 を使用していましたが、バージョンが 1.9 の更新されたパッケージがあることに気付きました。パッケージを更新したところ、コードがコンパイルされなくなりました。コンパイルに失敗するコードは次のとおりです。

public static T GetProfiledContext<T>() where T : System.Data.Objects.ObjectContext
{
    var conn = GetStoreConnection<T>();
    if (_enableProfiling)
    {
        conn = ProfiledDbConnection.Get(conn);
    }
    return ObjectContextUtils.CreateObjectContext<T>(conn);
}

コンパイル エラーでは、次の問題が報告されます。

  • 「MvcMiniProfiler.Data.ProfiledDbConnection」には、「Get」の定義が含まれていません。
  • 名前 'ObjectContextUtils' は現在のコンテキストに存在しません。

ProfiledDbConnection のインスタンスを作成し、それに接続と IDbProfiler 型のオブジェクトを渡すことができることに気付きましたが、そのオブジェクトを取得する方法がわかりません。

ObjectContextUtils に関しては、何を使用すればよいかわかりません。

これらの問題を解決するにはどうすればよいですか?


アップデート:

@monkeychatter の推奨に従って、コードを作成することができました。次の実行時例外が発生します。

タイプ 'MvcMiniProfiler.Data.ProfiledDbConnection' のストア プロバイダー インスタンスで 'get_ProviderFactory' メソッドを呼び出した後、null が返されました。ストア プロバイダーが正しく機能していない可能性があります。

ILSpy で ProfiledDbConnection を調べると、DbProviderFactory がオーバーライドされなくなっていることがわかりました。基本実装が null を返すため、それがエラーの原因のようです。この問題を回避できた人はいますか?

4

1 に答える 1

12

私はちょうど同じことを経験しましたが、残念ながらほとんど/すべてのドキュメントは「古い」方法を示しています。この機能の大部分は、ProfiledDbConnection クラス自体に移動されました。ProfiledDbConnection で ObjectContext 拡張機能を取得するには、nuget パッケージ ' MiniProfiler.EF 'からアセンブリを参照する必要もあります。以下は、1.9 で同等のコードを取得するための編集です。

//reference extension from MvcMiniProfiler.Data
using MvcMiniProfiler.Data;

var conn = GetStoreConnection<T>();   
if (_enableProfiling)   
{   
    //conn = ProfiledDbConnection.Get(conn);   
    conn = new ProfiledDbConnection(conn, MiniProfiler.Current);
}   
//return ObjectContextUtils.CreateObjectContext<T>(conn);
return conn.CreateObjectContext<T>();

更新: 更新された質問ごとに、以前のソリューションの行を以下のように置き換えます。これには、ProviderFactory の問題を修正するためのオーバーライドが含まれます。

    //conn = new ProfiledDbConnection(conn, MiniProfiler.Current);
    conn = new EFProfiledDbConnection(conn, MiniProfiler.Current);
于 2011-08-31T13:50:38.560 に答える