Posiadanie otwartego połączenia i przekazywanie go między klasami to na ogół zły pomysł. Jasne, otwarcie połączenia jest dość dużym spadkiem wydajności, ale pula połączeń już załatwiła to przez ponowne użycie już otwartych połączeń. Uwaga: zawsze czekaj tak długo, jak to możliwe, aby zadzwonić connection.Open()
, szczególnie w kodzie wielowątkowym, ponieważ spowoduje to przypisanie połączenia do twojej metody (co potencjalnie zwiększy potrzebną liczbę otwartych połączeń z bazą danych).
Aby uczynić twoje klasy tak ogólnymi, jak to możliwe, zaleciłbym, aby klasa podstawowa ujawniła metodę z IDbConnection, a twoje repozytoria będą miały bardziej ogólną implementację.
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();
...
}
}
}