Сначала я использую код EF 4.2 в моем проекте mvc3.
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();
...
}
Исключение выдается во время первой операции с db в action(consistantUser);
вот след:
в MvcMiniProfiler.MiniProfiler.AddSqlTiming (статистика SqlTiming) в C: \ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ MiniProfiler.cs: строка 274
в MvcMiniProfiler.SqlTiming..ctor (команда DbCommand, тип ExecuteType, профилировщик MiniProfiler) в C: \ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ SqlTiming.cs: строка 137
в MvcMiniProfiler.SqlProfiler.ExecuteStartImpl (команда DbCommand, тип ExecuteType) в C: \ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ SqlProfiler.cs: строка 39
на MvcMiniProfiler.SqlProfilerExtensions.ExecuteStart (SqlProfiler sqlProfiler, команда DbCommand, тип ExecuteType) в C: \ Users \ sam \ Desktop \ mvc-мини-профилировщик \ MvcMiniProfiler \ SqlProfiler.cs: строка 93
в MvcMiniProfiler.MiniProfiler.MvcMiniProfiler.Data.IDbProfiler.ExecuteStart (DbCommand profiledDbCommand, ExecuteType executeType) в C: \ Users \ sam \ Рабочий стол \ mvc-мини-профилировщик \ MvcMiniProfiler \ LineProfID:.
в MvcMiniProfiler.Data.ProfiledDbCommand.ExecuteDbDataReader (поведение CommandBehavior) в C: \ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ Data \ ProfiledDbCommand.cs: строка 158
в System.Data.Common.DbCommand.ExecuteReader (поведение CommandBehavior)
в System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands (EntityCommand entityCommand, поведение CommandBehavior)
что я делаю не так?
Любая помощь будет оценена.
РЕДАКТИРОВАТЬ: Я попытался инициализировать MiniProfiler (MiniProfilerEF.Initialize();
) снова, в потоке, где выполняется задание backgroung (до инициализации DatabaseContext), и теперь есть еще одно исключение:
Невозможно привести объект типа 'MvcMiniProfiler.Data.EFProfiledDbConnection' к типу 'System.Data.SqlClient.SqlConnection
На самом деле нет необходимости профилировать запросы в фоновом потоке, но вылетает всего потока, поэтому приложение не работает должным образом, и мне нужно отключить весь профилировщик. Есть ли способ отключить его для этого, фона, потока, чтобы предотвратить его сбой?