Avoir une connexion ouverte et la passer entre les classes est généralement une mauvaise idée. Bien sûr, l'ouverture d'une connexion est tout à fait un problème de performances, mais cela est déjà pris en charge par le pool de connexions en réutilisant les connexions déjà ouvertes. Une remarque cependant: attendez toujours aussi longtemps que possible pour appeler connection.Open()
, en particulier dans le code multithread car cela affectera la connexion à votre méthode (ce qui augmentera potentiellement la quantité nécessaire de connexions ouvertes à la base de données).
Pour rendre vos classes aussi génériques que possible, je recommanderais d'avoir une classe de base exposant une méthode avec IDbConnection, et vos référentiels auront une implémentation plus générique.
internal abstract class Repository
{
private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString;
protected IDbConnection GetConnection()
{
return new SqlConnection(ConnectionString);
}
}
public class MyRepository : Repository
{
public IEnumerable<object> Get()
{
using (var connection = GetConnection())
{
connection.Open();
...
}
}
}
Richard Jansson
la source