MiniProfiler,EntityFramework代码优先和后台任务nullreference

rom*_*man 5 c# asp.net-mvc entity-framework mvc-mini-profiler

我首先在我的mvc3项目中使用EF 4.2代码.

miniprofiler工作得很好(sql + mvc),但是我遇到了异步任务的问题.

我用这种方式表演(这个方法好吗?我对此感到有点不安new DatabaseContext())

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();
   });
}
Run Code Online (Sandbox Code Playgroud)

我在Application_Start中有适当的行:

  protected void Application_Start()
    {
        MiniProfilerEF.Initialize();
        ...
    }
Run Code Online (Sandbox Code Playgroud)

在db的第一个操作期间抛出了一个excpetion,action(consistantUser); 这里是跟踪:

在MvcMiniProfiler.MiniProfiler.AddSqlTiming(SqlTiming stats)中的C:\ Users\sam\Desktop\mvc-mini-profiler\MvcMiniProfiler\MiniProfiler.cs:MvcMiniProfiler.SqlTiming..ctor中的第274行(DbCommand命令,ExecuteType类型,MiniProfiler profiler) )在C:\ Users\sam\Desktop\mvc-mini-profiler\MvcMiniProfiler\SqlTiming.cs:第137行,位于C:\ Users\sam\Desktop\mvc-中的MvcMiniProfiler.SqlProfiler.ExecuteStartImpl(DbCommand命令,ExecuteType类型) mini-profiler\MvcMiniProfiler\SqlProfiler.cs:第39行,位于C:\ Users\sam\Desktop\mvc-mini-profiler\MvcMiniProfiler\SqlProfiler.cs中的MvcMiniProfiler.SqlProfilerExtensions.ExecuteStart(SqlProfiler sqlProfiler,DbCommand命令,ExecuteType类型):位于MvcMiniProfiler的C:\ Users\sam\Desktop\mvc-mini-profiler\MvcMiniProfiler\MiniProfiler.IDbProfiler.cs:第14行的MvcMiniProfiler.MiniProfiler.MvcMiniProfiler.Data.IDbProfiler.ExecuteStart(DbCommand profiledDbCommand,ExecuteType executeType)第93行. Data.ProfiledDbCommand.ExecuteDbDataReader(CommandBehavior behavior)in C:\ Users\sam\Desktop\mvc-mini-profiler\MvcMiniProfiler\Data\ProfiledDbCommand.cs:System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands上System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)的第158行( EntityCommand entityCommand,CommandBehavior行为)

我究竟做错了什么?任何帮助将不胜感激.

编辑:我尝试再次初始化MiniProfiler(MiniProfilerEF.Initialize();),在执行backgroung任务的线程中(在启动DatabaseContext之前),现在还有另一个例外:

无法将"MvcMiniProfiler.Data.EFProfiledDbConnection"类型的对象强制转换为"System.Data.SqlClient.SqlConnection"类型

实际上,在后台线程中对查询进行概要分析并不是必需的,但它会导致整个线程崩溃,因此应用程序无法正常工作,我不得不讨论整个分析器.有没有办法为它,后台,线程禁用它以防止它崩溃?

ble*_*ter 1

当代码尝试访问连接字符串时,它会中断,因为连接字符串是实体框架样式的连接字符串。

将连接字符串传递给微型分析器时,您必须从 EF 连接字符串中提取实际的连接字符串。

EntityConnection connection = 
    new EntityConnection(ConfigurationManager
                   .ConnectionStrings["ConnectionStringName"].ConnectionString));

string connectionString = connection.StoreConnection.ConnectionString;
Run Code Online (Sandbox Code Playgroud)