Comment gérer les connexions à utiliser dans Dapper?

dapper inversion-of-control structuremap

Question

J'essaye d'utiliser Dapper sur une couche de service. Comment devrait-il gérer la IDbConnection?

Je l'utilise dans un projet MVC5 avec StructureMap for IoC.

Puis-je l'injecter dans les classes de couche serveur? Ou peut-être un DapperWrapper comme suit:

public class DapperWrapper {

  private ConnectionString { get { return Settings.ConnectionString; } }

  public IEnumerable<T> Query<T>(String sql, dynamic parameters = null) {

    IEnumerable<T> result;

    using (IDbConnection connection = new SqlConnection(_connection)) {
      connection.Open();
      result = SqlMapper.Query<T>(connection, sql, parameters);        
    }

    return result;

  } // Query

  // OTHER DAPPER METHODS
 }
  1. J'ai peur que cette approche s'ouvre et ferme de nombreuses connexions. Est-ce un problème?

  2. Dois-je injecter une connexion dans le DapperWrapper, et si oui, comment?

Quelle est la meilleure façon de procéder?

Réponse d'expert

  1. Tant que la mise en commun de connexion est activée (pour le serveur SQL il est activé par défaut) , vous n'êtes pas réellement ouvrir et fermer les connexions - vous récupérez de / libérer à la piscine de connexion. Il ne devrait prendre que des microsecondes.

  2. C'est entièrement une décision de conception. L'injection fonctionne. Travaux de construction à la demande. Dans le cas d'une requête http, vous pouvez également utiliser le stockage de connexion à la demande (différé mais en cache) axé sur les demandes (assurez-vous simplement de le disposer à la fin de la demande!).




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