Eine offene Verbindung zu haben und sie zwischen Klassen weiterzugeben, ist im Allgemeinen eine schlechte Idee. Sicher, das Öffnen einer Verbindung ist ein ziemlicher Leistungseinbruch, aber der Verbindungspool sorgt bereits dafür, dass bereits geöffnete Verbindungen wiederverwendet werden. Eine Bemerkung: Warten Sie immer so lange wie möglich, um aufzurufen connection.Open()
, insbesondere bei Multithread-Code, da dadurch die Verbindung Ihrer Methode zugewiesen wird (wodurch möglicherweise die erforderliche Anzahl offener Verbindungen zur Datenbank erhöht wird).
Um Ihre Klassen so allgemein wie möglich zu gestalten, würde ich empfehlen, eine Basisklasse zu haben, die eine Methode mit IDbConnection verfügbar macht, und Ihre Repositorys werden generischer implementiert.
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();
...
}
}
}