Usine IDbConnection utilisant Dapper

asp.net c# dapper

Question

J'utilise dapper dans ma solution ASP.NET WebForms.

Toutes mes classes qui traitent des données récupèrent une connexion ouverte à partir de cette classe de base

public abstract class SalesDb : IDisposable
{
    protected static IDbConnection OpenConnection()
    {
        IDbConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SalesDb"].ConnectionString);
        connection.Open();
        return connection;
    }

    public void Dispose()
    {
        OpenConnection().Dispose();
    }
}

Exemple de classe de service qui utilise cette classe de base

public class LeadService : SalesDb
{
    public IEnumerable<LeadDto> Select()
    {
        using (IDbConnection connection = OpenConnection())
        {
            return connection.Query<LeadDto>("Lead_Select",
                null, null, true, null, CommandType.StoredProcedure);
        }
    }
}

Y at-il un inconvénient que la méthode OpenConnection( ) dans la classe de base est statique et renvoie une nouvelle instance pour chaque appel?

Réponse acceptée

Vous créez une nouvelle connexion dans dispose? Cela ne marchera pas! Utilisez une boucle simple avec plus de 100 itérations (la taille maximale du pool par défaut est 100) et vous verrez probablement des types d'exceptions ( trop de connexions ouvertes , ExecuteReader nécessite une connexion ouverte et disponible, etc.).

En tout cas, je m'attends à de sérieux problèmes de performances car le pool doit créer de nouvelles connexions physiques consécutives.

Je ne réinventerais pas le pool de connexion . Mon conseil est: n'utilisez pas cette classe, d'autant plus dans asp.net.

Ne pas pocher sur le territoire du Pool de connexion ;-)

Mais notez que vous pouvez répondre à ces deux questions avec Non . La méthode statique ne pose pas de problème (contrairement à une connexion statique) et ne renvoie pas toujours une nouvelle connexion (car le pool renverrait des connexions qui ne sont pas utilisées actuellement). Mais le principal problème de votre classe est la dispose qui crée des connexions et les ouvre.




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