私はmvc3プロジェクトで最初にEF 4.2コードを使用します。MiniProfiler、EntityFrameworkコードの最初とバックグラウンドタスクnullreference
miniprofilerはうまく機能しますが(SQL + MVC)、非同期タスクに関する問題があります。
私はのApplication_Startで適切なラインを持っている
public static void PerformAsycAction(this User user, Action<User> action)
{
ThreadPool.QueueUserWorkItem(_ =>
{
var context = new DatabaseContext();
MiniProfilerEF.Initialize();
var consistantUser = context.Set<User>().Get(user.Id);
action(consistantUser);
context.SaveChanges();
});
}
(が、私はこのnew DatabaseContext()
で少し不安を感じて[OK]をこの方法で?)「日をこのように実行します。
protected void Application_Start()
{
MiniProfilerEF.Initialize();
...
}
exc30は、最初の操作中にdbでaction(consistantUser);
にスローされます。ここにトレースがあります。
MvcMiniProfiler.MiniProfiler.AddSqlTimingで(SqlTiming統計)はC:\ユーザーは、SAM \デスクトップ\ MVC-ミニプロファイラ\ MvcMiniProfiler \ MiniProfiler.cs:\ MvcMiniProfiler.SqlTiming..ctor(でライン274 をされたDbCommandコマンド、ExecuteType C:\ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ SqlTiming.cs内の137: のMvcMiniProfiler.SqlProfiler.ExecuteStartImpl(DbCommandコマンド、ExecuteTypeタイプ)のC:\ Users \ samにあります。 \ Users \ sam \ Desktop \ mvc-mini-profiler \ mvc-mini-profiler \ MvcMiniProfiler \ SqlProfiler.cs:行39 MvcMiniProfiler.SqlProfilerExtensions.ExecuteStart(SqlProfiler sqlProfiler、DbCommandコマンド、ExecuteTypeタイプ) MvcMiniProfiler.MiniProfiler.MvcMiniProfiler.Data.IDbProfiler.ExecuteStart(DbCommand profiledDbCommand、Exe)のMvcMiniProfiler \ SqlProfiler.cs:行93 MvcMiniProfiler \ MiniProfiler.IDbProfiler.cs:行14 at MvcMiniProfiler.Data.ProfiledDbCommand.ExecuteDbDataReader(CommandBehaviorビヘイビア)(C:\ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ Data \ ProfiledDbCommand.cs:行158 at System.Data.Common.DbCommand.ExecuteReader(CommandBehaviorビヘイビア) at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand、CommandBehaviorビヘイビア) )
私は間違っていますか? 助けていただければ幸いです。
EDIT:私はbackgroungタスクが(DatabaseContextを開始する前に)performdれるスレッドで、再びMiniProfiler(MiniProfilerEF.Initialize();
)を初期化しようとした、そして今、別の例外があります:
のオブジェクトをキャストすることができませんが実際には「System.Data.SqlClient.SqlConnection
を入力するタイプ「MvcMiniProfiler.Data.EFProfiledDbConnection」は、それがバックグラウンドスレッドでクエリをプロファイリングする必要ありませんが、それクラッシュ全体のスレッド、アプリケーションが正常に動作しないように、私はプロファイラ全体を嫌う必要があります。それがクラッシュするのを防ぐために、それを無効にする方法はありますか?
実際の例外は何ですか? –
NullReferenceException –
これらの関数のいずれにもNULLを渡していないことを検証しましたか? –