Cómo pasar una conexión mvc-mini-profiler a una clase base desde MVC3

asp.net-mvc-3 dapper mvc-mini-profiler

Pregunta

Dado este fragmento de código

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
    }
}

¿Cómo podría envolver la conexión en una conexión perfilada si no tiene acceso al proceso de creación de la conexión? ¿Reescribe el código en la súper clase y lo envuelve allí? Esto implicaría cambiar cientos de clases que heredan de la base. Preferiría una forma de cambiar la clase base, con los mínimos cambios necesarios para los supervivientes.

Gracias, Stephen

Respuesta aceptada

Luego de un poco de prueba y error, me comprometí y agregué una referencia a MvcMiniProfiler en la biblioteca base y cambié el código de conexión un poco.

    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;

Esto funciona tanto para el alojamiento en el proyecto MVC (con fines de creación de perfiles, donde no tenemos esa capacidad (bases de datos QA / Prod)) y el servicio WPF / Windows



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow