2011-07-05 10 views
7

He estado jugando con MVC-Mini-Profiler, y me pareció muy útil. Sin embargo, en todas las páginas que trazo, recibo informes de consultas duplicadas, como la siguiente.MVC-Mini-Profiler muestra falsamente consultas duplicadas

Sin embargo, he rastreado las consultas en SQL Server Profiler, y no hay dudas de que solo llega al DB una vez.

¿Me falta un concepto aquí o lo configuré de la manera incorrecta? He buscado alto y bajo para personas con problemas similares, sin suerte, así que dudo que haya un error.

Trace

http://localhost:27941/clubs 
T+175.2 ms 
Reader 
13.6 ms 
utePageHierarchy Execute System.Collections.Generic.IEnumerable<T>.GetEnumerator GetResults Execute ExecuteStoreCommands 
SELECT 
[Extent1].[TeamId] AS [TeamId], 
[Extent1].[Title] AS [Title], 
[Extent1].[TitleShort] AS [TitleShort], 
[Extent1].[LogoImageId] AS [LogoImageId], 
[Extent1].[Slug] AS [Slug], 
(SELECT 
    COUNT(1) AS [A1] 
    FROM [dbo].[Athletes] AS [Extent2] 
    WHERE [Extent1].[TeamId] = [Extent2].[TeamId]) AS [C1] 
FROM [dbo].[Teams] AS [Extent1] 
WHERE 352 = [Extent1].[CountryId] 

http://localhost:27941/clubs 
T+175.4 ms 
DUPLICATE Reader 
13.4 ms 
utePageHierarchy Execute System.Collections.Generic.IEnumerable<T>.GetEnumerator GetResults Execute ExecuteStoreCommands 
SELECT 
[Extent1].[TeamId] AS [TeamId], 
[Extent1].[Title] AS [Title], 
[Extent1].[TitleShort] AS [TitleShort], 
[Extent1].[LogoImageId] AS [LogoImageId], 
[Extent1].[Slug] AS [Slug], 
(SELECT 
    COUNT(1) AS [A1] 
    FROM [dbo].[Athletes] AS [Extent2] 
    WHERE [Extent1].[TeamId] = [Extent2].[TeamId]) AS [C1] 
FROM [dbo].[Teams] AS [Extent1] 
WHERE 352 = [Extent1].[CountryId 

utilizo EF4 y han puesto en práctica el contexto de esta manera:

public class BaseController : Controller 
{ 
    public ResultsDBEntities _db; 

    public BaseController() 
    { 
     var rootconn = ProfiledDbConnection.Get(GetStoreConnection(ConfigurationManager.ConnectionStrings["ResultsDBEntities"].ConnectionString)); 
     var conn = ProfiledDbConnection.Get(rootconn); 
     _db = ObjectContextUtils.CreateObjectContext<ResultsDBEntities>(conn); 
    } 

    public static DbConnection GetStoreConnection<T>() where T : System.Data.Objects.ObjectContext 
    { 
     return GetStoreConnection("name=" + typeof(T).Name); 
    } 

    public static DbConnection GetStoreConnection(string entityConnectionString) 
    { 
     DbConnection storeConnection; 

     // Let entity framework do the heavy-lifting to create the connection. 
     using (var connection = new EntityConnection(entityConnectionString)) 
     { 
      // Steal the connection that EF created. 
      storeConnection = connection.StoreConnection; 

      // Make EF forget about the connection that we stole (HACK!) 
      connection.GetType().GetField("_storeConnection", 
       BindingFlags.NonPublic | BindingFlags.Instance).SetValue(connection, null); 

      // Return our shiny, new connection. 
      return storeConnection; 
     } 
    } 
} 
+0

¿Esto sucede si tomas el último nuget? ... ¿puedes asegurarte de hacer una 'var s = MiniProfiler.Current.Step (" whatever "))' al comienzo de tu solicitud y disponer de ella al final de tu solicitud? –

+0

Llegué aquí porque estoy teniendo el mismo problema. No hay perfiles de db involucrados (¡todavía!): Solo las solicitudes ajax que solo se envían una vez (Glimpse lo confirma) aparecen muchas veces en la salida. Puedo ver las llamadas múltiples correspondientes a/mini-profiler-results? Id = SOMEGUID donde SOMEGUID a veces se duplica. En el ejemplo que estoy viendo ahora hay seis llamadas a/mini-profiler-results para cuatro solicitudes ajax, dos con GUIDS duplicados, y esto corresponde a mis seis resultados de salida del generador de perfiles. Espero que tenga sentido! – randomsequence

+0

Estoy experimentando este problema con MVC Mini Profiler versión 1.9. – solidbeats

Respuesta

5

informé al equipo Mini Profiler (http://code.google.com/p/mvc-mini-profiler/issues/detail? id = 62 & can = 1) y hoy han emitido un parche que parece solucionar el problema.

Imagino que esto se incluirá en la próxima versión. Espero que ayude :)

Cuestiones relacionadas