¿Cómo crear una conexión SQL escalable que aproveche al máximo la agrupación de conexiones?

ado.net asp.net c# dapper sql

Pregunta

Aquí está el patrón de conexión del repositorio actual en una aplicación en la que estoy trabajando.

public class Repository : IDisposable {


public IDbConnection SiteConnection {
  get {
    if (siteConnection == null) {
      siteConnection = new SqlConnection(DataBaseConfig.SiteConnectionString);
      siteConnection.Open();
    }
    return siteConnection;
  }
}


public void Dispose() {

  if (siteConnection != null) {
    siteConnection.Dispose();
    siteConnection = null;
  }
}



}

Los repositorios se ven así:

public class SomeRepository : Repository {

   public IEnumerable<Object> GetSomeObjects() {
        return SiteConnection.Query<Object>("select statement");
    }

   public IEnumerable<OtherObject> GetSomeOtherObjects() {
        return SiteConnection.Query<OtherObject>("select statement");
    }

}

Por lo que puedo decir, Dispose solo se llama al final de la carga de la página. No se están utilizando transacciones. En el pasado, tenía la impresión de que siempre debes llegar tarde y salir temprano cuando se trata de SQL.

public IEnumerable<Object> GetObjects() {
    using(sqlconnection conn = new sqlconnection(connString)) {
        conn.Open();
        //do something with the database
    }
}

¿Qué método es más a prueba de balas y aprovecha al máximo la agrupación de conexiones y utiliza la menor cantidad de recursos de base de datos?

Respuesta aceptada

Eche un vistazo a esta explicación msdn sobre la agrupación de conexiones. Cerrar la conexión lo antes posible la devuelve al grupo. Creo que el mejor consejo que ha surgido de discusiones similares es dejar que ado.net haga lo que mejor hace y no tratar de superar su lógica de agrupamiento. Si miras a SqlConnection en un descompilador, hay muchas cosas bajo las sábanas. Es increíble cómo ahora incluso puede cerrar una conexión mientras es parte de una transacción más grande (con Sql Server 2008).



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué