2011-08-31 13 views
9

Tengo un proyecto asp.net que usa mvc-mini-profiler. Estaba usando la versión 1.7 del paquete NuGet y noté que hay un paquete actualizado cuya versión es 1.9. Actualicé el paquete y ahora mi código ya no se compila. El código que falla al compilar es:Actualización del miniperfil de 1.7 a 1.9 rompe el código existente

public static T GetProfiledContext<T>() where T : System.Data.Objects.ObjectContext 
{ 
    var conn = GetStoreConnection<T>(); 
    if (_enableProfiling) 
    { 
     conn = ProfiledDbConnection.Get(conn); 
    } 
    return ObjectContextUtils.CreateObjectContext<T>(conn); 
} 

La compilación errores cuenta de los siguientes asuntos:

  • 'MvcMiniProfiler.Data.ProfiledDbConnection' no contiene una definición para 'Get'.
  • El nombre 'ObjectContextUtils' no existe en el contexto actual.

me di cuenta de que puedo crear una instancia de ProfiledDbConnection y pasarlo la conexión y un objeto de tipo IDbProfiler, pero no estoy seguro de cómo debería obtener ese objeto.

En cuanto a ObjectContextUtils, no tengo ni idea de lo que se supone que debo usar.

¿Cómo puedo solucionar estos problemas?


Actualización:

Siguiendo las recomendaciones de @ monkeychatter, me las arreglé para construir el código. Ahora recibe la siguiente excepción en tiempo de ejecución:

Un nulo fue devuelto después de llamar al método 'get_ProviderFactory' en una instancia de proveedor de almacén del tipo 'MvcMiniProfiler.Data.ProfiledDbConnection'. Es posible que el proveedor de la tienda no esté funcionando correctamente.

Mediante la inspección de ProfiledDbConnection en ILSpy, me di cuenta de que ya no anula la DbProviderFactory. Esa parece ser la causa del error, ya que la implementación base devuelve nulo. ¿Alguien ha podido solucionar este problema?

Respuesta

12

Acabo de pasar por lo mismo y desafortunadamente la mayoría de la documentación muestra la 'vieja' manera. La mayoría de esta funcionalidad se ha movido a la clase ProfiledDbConnection. Para obtener la extensión ObjectContext en ProfiledDbConnection, también necesita hacer referencia a un ensamblado del paquete nuget 'MiniProfiler.EF'. A continuación se encuentran las ediciones para obtener el código equivalente en 1.9.

//reference extension from MvcMiniProfiler.Data 
using MvcMiniProfiler.Data; 

var conn = GetStoreConnection<T>(); 
if (_enableProfiling) 
{ 
    //conn = ProfiledDbConnection.Get(conn); 
    conn = new ProfiledDbConnection(conn, MiniProfiler.Current); 
} 
//return ObjectContextUtils.CreateObjectContext<T>(conn); 
return conn.CreateObjectContext<T>(); 

Actualización: por su pregunta actualizada que sustituiría a la línea en mi solución anterior de la siguiente manera. Esto incluye una anulación para solucionar el problema ProviderFactory:

//conn = new ProfiledDbConnection(conn, MiniProfiler.Current); 
    conn = new EFProfiledDbConnection(conn, MiniProfiler.Current); 
+0

No puedo encontrar un método CreateObjectContext en ProfiledDbConnection. ¿Estás seguro de que el código anterior es correcto? –

+0

Buen punto, gracias. Olvidé mencionar que proviene de un paquete add-on nuget MiniProfiler.EF que incluye el ensamblado MvcMiniProfiler.EntityFramework. Respuesta editada para reflejar eso. – tonysurma

+0

Gracias, eso ayudó. Sin embargo, todavía tengo problemas. He actualizado mi pregunta con más información. –

Cuestiones relacionadas