6

EF 4.1とミニプロファイラの使用1.7。 model-firstを使用して、既存のデータベースからスキャンします。 EFは、DbContext/DbSetではなく、ObjectContext/ObjectSetから派生するクラスを生成します。私はそれを制御する場所を見つけることができませんでした。まだEFデータベースのプロファイリングに関する問題

私は人気のあるソリューションを試してみましたが、無駄です。

フラストレーションに苦しんで、ProfiledDbConnectionで直接作成された明示的なEntityConnectionでコンテキストを直接作成しようとしました。私は接続が意図されたタイプではなかったという機会を迂回したかったのです。

public HomeController() { 
try { 
    string[] paths = new string[] { @"res://*/" }; 
    Assembly[] assys = new Assembly[] { Assembly.GetExecutingAssembly() }; 
    MetadataWorkspace mw = new MetadataWorkspace(paths, assys); 
    string cnx = WebConfigurationManager.ConnectionStrings["XXXX"].ConnectionString; 
    DbConnection cx = MvcMiniProfiler.Data.ProfiledDbConnection.Get(new SqlConnection(cnx), MiniProfiler.Current); 
    //DbConnection cx = Database.DefaultConnectionFactory.CreateConnection(cnx); 
    EntityConnection ec = new EntityConnection(mw, cx); 
    db = new MyContextEntities(ec); 
} 
catch (Exception ex) { 
    Trace.WriteLine("EDM failed: " + ex.Message); 
    db = new MyContextEntities(); 
} 
} 

正しいパスが取られていることを確認しました。実際にLINQクエリを実行している場合しかし、我々は例外を取得:

「System.Data.SqlClient.SqlConnection」を入力するタイプ 「MvcMiniProfiler.Data.ProfiledDbConnection」のオブジェクトをキャストすることができません。

問題文は次のとおりです。

return query.ToList(); 

EF内側明らかに何かが絶対にSqlConnectionオブジェクトを望んでいるので、スタックトレースは、さらに興味深いです! System.Data.Common.Utils.CommandHelper.SetStoreProviderCommandStateでSystem.Data.Common.DbCommand.set_ConnectionでSystem.Data.SqlClient.SqlCommand.set_DbConnection(たDbConnection値) (たDbConnection値) で

(EntityCommand System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommandsで entityCommand、たEntityTransactionたEntityTransaction、たDbCommand storeProviderCommand) (EntityCommand entityCommand、のCommandBehavior挙動)System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute [TResultType(ObjectContextは 文脈において、ObjectParameterCollection parameterValues)System.Data.Objects.ObjectQuery 1.System.Collections.Generic.IEnumerable.GetEnumerator() at System.Collections.Generic.List 1..ctorでSystem.Data.Objects.ObjectQuery 1.GetResults(Nullable 1 forMergeOption) で(IEnumerableを1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable 1ソース)明らかに

、私が代わりにそれをSqlConnectionオブジェクトを養うならば、すべてのもの幸せです。

ここでは何が起こっていますか?これは今までどのように機能しましたか?多分、EDMXの場合にはうまくいかなかったでしょうか? ObjectContextから派生したという事実には何の支障もありませんか?

+0

同じ問題が発生しています。まだ回避策はありません:( –

+0

万一、EF 4.1 'Update 1'を使用していますか? – kidoman

+0

NuGetパッケージによると、私はEF 4.1.10330.0とMiniProfiler 1.7を使用しています。適切な? –

答えて

1

EF(4.1.10715.0)パッケージとMiniProfiler(1.9.1)パッケージをアップグレードし、MiniProfiler.EF(1.9.1)パッケージを追加した後、App_Startモジュール(MiniProfiler.cs)に移動し、 ProfiledDbConnectionFactoryコード:

MiniProfilerEF.Initialize(); 

すべてが順調です。

関連する問題