내 mvc3 프로젝트에서 EF 4.2 코드를 먼저 사용합니다.MiniProfiler, EntityFramework 코드 첫 번째 및 백그라운드 작업 nullreference
miniprofiler는 잘 작동하지만 (SQL + MVC) 비동기 작업에 문제가 있습니다.
protected void Application_Start()
{
MiniProfilerEF.Initialize();
...
}
:
나는 위해 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()
에 약간의 불안이 방법 느낌이있다) '안에이 방법을 수행 Excipeion은 db가있는 첫 번째 작업 중에 던졌습니다 action(consistantUser);
여기 추적 :
MvcMiniProfiler.MiniProfiler.AddSqlTiming에서(SqlTiming 통계) C에서 : \ 사용자 샘 \ 바탕 화면 \ MVC-미니 프로파일 \ MvcMiniProfiler \ MiniProfiler.cs : \ MvcMiniProfiler.SqlTiming..ctor (에서 라인 (274) 을 DbCommand 명령, ExecuteType C : \ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ SqlTiming.cs : 137 C : \ Users \ sam에있는 MvcMiniProfiler.SqlProfiler.ExecuteStartImpl (DbCommand 명령, ExecuteType 유형)의 137 줄에 미니 프로파일 러 프로필러를 입력합니다. \ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfilerExtensions.ExecuteStart (SqlProfiler sqlProfiler, DbCommand 명령, ExecuteType 유형)의 행 39 에서 \ MvcMiniProfiler.MiniProfiler.MbcMiniProfiler.Data.IDbProfiler.ExecuteStart (DbCommand profiledDbCommand, Exe)에서 MvcMiniProfiler \ SqlProfiler.cs : 줄 93 C : \ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ MiniProfiler.IDbProfiler.cs에서 MvcMiniProfiler.Data.ProfiledDbCommand.ExecuteDbDataReader (commandBehavior 비헤이비어)의 12 행 12 에서 C : 라인 System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands에서 System.Data.Common.DbCommand.ExecuteReader (CommandBehavior를 동작) (하여 EntityCommand하여 EntityCommand, CommandBehavior를 동작 : MvcMiniProfiler \ 데이터 \의 ProfiledDbCommand.cs \ 바탕 화면 \의 MVC-미니 프로파일)
무엇이 잘못 되었나요? 도움이 될 것입니다.
편집 : 나는 backgroung에 작업 (DatabaseContext를 시작하기 전에) performd 된 스레드에서 다시 MiniProfiler (MiniProfilerEF.Initialize();
)를 초기화했는데, 지금은 다른 예외가있다 :
의 개체를 캐스팅 할 수 없습니다가 유형 'MvcMiniProfiler.Data.EFProfiledDbConnection은'
사실 System.Data.SqlClient.SqlConnection '를 입력하기 위해서는 백그라운드 스레드에서 쿼리를 프로파일이 켜지지 아니지만, 충돌 전체 스레드, 그래서 응용 프로그램이 제대로 작동하지 않습니다, 그리고 나는 전체 프로파일 러를 무시해야합니다. 그것, 배경, 스레드가 충돌을 방지하기 위해 그것을 해제하는 방법이 있습니까?
실제 예외는 무엇입니까? –
NullReferenceException –
null을 해당 함수에 전달하지 않았 음을 확인 했습니까? –