Наличие открытой связи и ее передача между классами, как правило, плохая идея. Конечно, открытие соединения - это серьезное снижение производительности, но об этом уже заботится пул соединений, повторно используя уже открытые соединения. Замечание: всегда ждите как можно дольше вызова 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();
...
}
}
}