Мати відкрите з'єднання та передавати його між класами, як правило, погана ідея. Звичайно, відкриття з'єднання - це досить вдалий показник, але це вже переймається пулом з'єднань, використовуючи повторно відкриті з'єднання. Хоча зауваження: завжди чекайте як можна довше дзвінка connection.Open()
, особливо в багатопотоковому коді, оскільки це призначить з'єднання з вашим методом (що потенційно збільшить необхідну кількість відкритих підключень до бази даних).
Щоб зробити ваші класи максимально універсальними, я рекомендую мати базовий клас, що відкриває метод із IDbConnection, і ваші сховища матимуть більш загальну реалізацію.
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();
...
}
}
}