Tener una conexión abierta y pasarla entre clases es generalmente una mala idea. Claro, abrir una conexión es un gran éxito en el rendimiento, pero el grupo de conexiones ya se encarga de eso al reutilizar las conexiones ya abiertas. Sin embargo, una observación: siempre espere el mayor tiempo posible para llamar connection.Open()
, especialmente en código multiproceso, ya que esto asignará la conexión a su método (lo que aumentará potencialmente la cantidad necesaria de conexiones abiertas a la base de datos).
Para que sus clases sean lo más genéricas posible, recomendaría tener una clase base que exponga un método con IDbConnection, y sus repositorios tendrán una implementación más genérica.
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();
...
}
}
}