我首先在我的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();
});
}
我在Application_Start中有适当的行:
protected void Application_Start()
{
MiniProfilerEF.Initialize();
...
}
在action(consistantUser);
中使用db进行第一次操作时抛出了这种情况
这是跟踪:
我做错了什么? 任何帮助将不胜感激。在C:\ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ MiniProfiler.cs中的MvcMiniProfiler.MiniProfiler.AddSqlTiming(SqlTiming stats):第274行 在MvcMiniProfiler.SqlTiming..ctor(DbCommand命令,ExecuteType类型,MiniProfiler探查器)中的C:\ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ SqlTiming.cs:第137行 在C:\ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ SqlProfiler.cs中的MvcMiniProfiler.SqlProfiler.ExecuteStartImpl(DbCommand命令,ExecuteType类型):第39行 在MvcMiniProfiler.SqlProfilerExtensions.ExecuteStart(SqlProfiler sqlProfiler,DbCommand命令,ExecuteType类型)在C:\ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ SqlProfiler.cs:第93行 在MvcMiniProfiler.MiniProfiler.MvcMiniProfiler.Data.IDbProfiler.ExecuteStart(DbCommand profiledDbCommand,ExecuteType executeType)在C:\ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ MiniProfiler.IDbProfiler.cs:第14行 在C:\ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ Data \ ProfiledDbCommand.cs中的MvcMiniProfiler.Data.ProfiledDbCommand.ExecuteDbDataReader(CommandBehavior behavior):第158行 在System.Data.Common.DbCommand.ExecuteReader(CommandBehavior行为) 在System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior behavior)
编辑:我尝试在执行backgroung任务的线程中(在启动DatabaseContext之前)再次初始化MiniProfiler(MiniProfilerEF.Initialize();
),现在还有另一个例外:
无法将“MvcMiniProfiler.Data.EFProfiledDbConnection”类型的对象强制转换为“System.Data.SqlClient.SqlConnection”
实际上,在后台线程中对查询进行概要分析并不是必需的,但崩溃整个线程,因此应用程序无法正常工作,我不得不讨论整个探查器。有没有办法为它,后台,线程禁用它以防止它崩溃?
答案 0 :(得分:1)
代码在尝试访问连接字符串时中断,因为连接字符串是实体框架样式的连接字符串。
将连接字符串传递给迷你剖析器时,必须从EF连接字符串中提取实际的连接字符串。
EntityConnection connection =
new EntityConnection(ConfigurationManager
.ConnectionStrings["ConnectionStringName"].ConnectionString));
string connectionString = connection.StoreConnection.ConnectionString;