2011-08-09 1 views
2

Compte tenu de ce bout de codeComment passer une connexion mvc-mini-profileur à une classe de base de MVC3

public abstract class Foo 
{ 
    private static SqlConnection _sqlConnection; 

    protected SqlConnection GetOpenConnection() 
    { 
     if (_sqlConnection == null) 
     { 
      _sqlConnection = new SqlConnection("connection string"); 
     } 
     return _sqlConnection; 
    } 

    protected abstract void Execute(); 
} 

public class FooImpl : Foo 
{ 

    protected override void Execute() 
    { 
     var myConn = GetOpenConnection(); 
     var dog = myConn.Query<dynamic>("select 'dog' Animal"); 
     var first = dog.First(); 

     string animalType = first.Animal; 
     // more stuff here 
    } 
} 

Comment voulez-vous envelopper la connexion à une connexion profilée si vous n'avez pas accès à la processus de création de connexion? Réécrire le code dans la super classe et l'emballer là? Cela impliquerait de changer des centaines de classes qui héritent de la base. Je préférerais un moyen de changer la classe de base, avec aussi peu de changements nécessaires aux supers.

Merci, Stephen

Répondre

3

Eh bien, après un peu d'essais et d'erreurs, je compromettais et ajouté un arbitre pour MvcMiniProfiler dans la bibliothèque de base et changé le code de connexion un peu.

protected DbConnection GetOpenConnection() 
    { 
     if (_connection == null) 
     { 
      _connection = new SqlConnection(ConfigurationManager.ConnectionStrings["connection string "].ConnectionString); 
      _connection.Open(); 
     } 
     return MvcMiniProfiler.Data.ProfiledDbConnection.Get(_connection, MiniProfiler.Current); 
    } 

    private static SqlConnection _connection; 

Cela fonctionne à la fois l'hébergement dans le projet MVC (à des fins de profilage, où nous ne disposons pas cette capacité (QA/Prod Bases de données)) et WPF/service Windows

+0

Nice; Bien que ce soit un peu ennuyeux d'avoir à pirater la création de la connexion, les résultats sont généralement assez éclairants pour enlever le goût amer; p –

+0

Au total, je l'ai montré à nos développeurs et les ampoules ont commencé à clignoter. –

+0

Ça va mieux. J'ai montré à notre DBA les requêtes que je pensais être en cours, elles arrivaient vers 150ms et la première chose qu'il a dit était: "Vous savez si vous avez changé ce paramètre de nvchar (4000) en varchar (15) pour obtenir de meilleures performances "ouais, nous avons fait TOUTES les requêtes à moins de 10ms maintenant. Holy Crap! Par la spécification http://code.google.com/p/dapper-dot-net/ Ansi Strings et varchar –

Questions connexes