2012-02-27 11 views
5

Utilizo primero el código EF 4.2 en mi proyecto mvc3.MiniProfiler, primeras tareas del fondo EntityFramework y tareas en segundo plano nullreference

Miniprofiler funciona bien (sql + mvc), pero tengo un problema con las tareas asincrónicas.

que realizan ellos de esta manera (este método es bien me siento un poco incómodo con esta new DatabaseContext()?) Línea correcta

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(); 
    }); 
} 

Tengo en Application_Start:

protected void Application_Start() 
    { 
     MiniProfilerEF.Initialize(); 
     ... 
    } 

La excpetion se produce durante la primera operación con db en action(consistantUser); aquí está la traza:

en MvcMiniProfiler.MiniProfiler.AddSqlTiming (estadísticas SqlTiming) en C: \ Users \ SAM \ Desktop \ mvc-mini-perfil del MvcMiniProfiler \ \ MiniProfiler.cs: Línea 274 en MvcMiniProfiler.SqlTiming..ctor (DbCommand comando, ExecuteType tipo, perfil de MiniProfiler) en C: \ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ SqlTiming.cs: línea 137 en MvcMiniProfiler.SqlProfiler.ExecuteStartImpl (comando DbCommand, tipo ExecuteType) en C: \ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ SqlProfiler.cs: línea 39 en MvcMiniProfiler.SqlProfilerExtensions.ExecuteStart (SqlProfiler sqlProfiler, comando DbCommand, tipo ExecuteType) en C: \ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ SqlProfiler.cs: línea 93 en MvcMiniProfiler.MiniProfiler.MvcMiniProfiler.Data.IDbProfiler.ExecuteStart (DbCommand profiledDbCommand, Exe cuteType executeType) en C: \ Users \ sam \ Desktop \ mvc-mini-profiler \ MvcMiniProfiler \ MiniProfiler.IDbProfiler.cs: línea 14 en MvcMiniProfiler.Data.ProfiledDbCommand.ExecuteDbDataReader (comportamiento CommandBehavior) en C: \ Users \ sam \ desktop \ mvc-mini-perfilador \ MvcMiniProfiler \ Data \ ProfiledDbCommand.cs: línea 158 en System.Data.Common.DbCommand.ExecuteReader (comportamiento CommandBehavior) en System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands (EntityCommand EntityCommand, comportamiento CommandBehavior)

¿Qué estoy haciendo mal? Cualquier ayuda será apreciada.

EDIT: I intentado inicializar MiniProfiler (MiniProfilerEF.Initialize();) de nuevo, en el hilo en el que se performd tarea backgroung (antes de iniciar DatabaseContext), y no hay otra excepción ahora:

No se puede convertir objeto de tipo 'MvcMiniProfiler.Data.EFProfiledDbConnection' al tipo 'System.Data.SqlClient.SqlConnection

de hecho, no es necesario recurrir a perfilar las consultas en el hilo de fondo, pero accidentes todo el hilo, por lo que la aplicación no funciona correctamente, y tengo que deshabilitar todo el generador de perfiles. ¿Hay alguna manera de deshabilitarlo para ese, fondo, hilo para evitar que se cuelgue?

+0

¿Cuál es la verdadera excepción? –

+0

NullReferenceException –

+0

¿Ha validado que no está pasando nulo en ninguna de esas funciones? –

Respuesta

1

El código se rompe cuando intenta acceder a su cadena de conexión porque la cadena de conexión es una cadena de conexión de estilo de Entity Framework.

Al pasar la cadena de conexión al miniperfil, debe extraer la cadena de conexión real de la cadena de conexión EF.

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

string connectionString = connection.StoreConnection.ConnectionString; 
Cuestiones relacionadas