Avere una connessione aperta e passarla tra le classi è generalmente una cattiva idea.
Certo, aprire una connessione è un bel colpo di performance, ma questo è già gestito dal pool di connessioni riutilizzando le connessioni già aperte. Un'osservazione però: aspetta sempre il più a lungo possibile per chiamare connection.Open()
, specialmente nel codice multithread poiché questo assegnerà la connessione al tuo metodo (che aumenterà potenzialmente la quantità necessaria di connessioni aperte al database).
Per rendere le tue classi il più generiche possibile, ti consiglio di fare in modo che una classe base esponga un metodo con IDbConnection e i tuoi repository avranno un'implementazione più generica.
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();
...
}
}
}