Comment créer une connexion SQL évolutive qui tire pleinement parti du regroupement de connexions?

ado.net asp.net c# dapper sql

Question

Voici le modèle de connexion de référentiel actuel sur une application sur laquelle je travaille.

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



}

Les référentiels ressemblent alors à ceci:

public class SomeRepository : Repository {

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

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

}

D'après ce que je peux dire, Dispose est uniquement appelé à la fin du chargement de la page. Aucune transaction n'est utilisée. Dans le passé, j'avais l'impression que vous deviez toujours arriver en retard et sortir tôt en matière de SQL.

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

Quelle méthode est la plus à l'épreuve des balles et tire pleinement parti du regroupement de connexions et utilise le moins de ressources de base de données?

Réponse acceptée

Jetez un oeil à cette explication msdn sur le regroupement de connexions. Fermer la connexion dès que possible le renvoie au pool. Je pense que le meilleur conseil qui soit ressorti de discussions similaires est de laisser ado.net faire ce qu'il fait de mieux et de ne pas chercher à dépasser sa logique de pooling. Si vous regardez SqlConnection dans un décompilateur, il se passe beaucoup de choses sous les couvertures. Il est incroyable que vous puissiez maintenant fermer une connexion alors qu'elle fait partie d'une transaction plus importante (avec Sql Server 2008).




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi