Некоторое время назад я написал слой ORM для моего приложения .net, где все строки базы данных представлены подклассом DatabaseRecord
. Существует ряд методов, таких как Load()
, Save()
и т. Д. В своей первоначальной реализации я создал соединение с БД в конструкторе DatabaseRecord
, например,
connection = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnectionName"].ConnectionString
);
Затем я вызываю Open()
и Close()
для этого SqlConnection в начале и в конце моих методов, которые обращаются к базе данных. Мне (как человеку, знакомому с программированием, но незнакомому с c # и .net) это показалось наиболее эффективным способом выполнения действий - иметь одно соединение и открывать / закрывать его, где это необходимо в классе.
Я только что читал, и кажется, что этот шаблон рекомендуется в нескольких местах:
using (var connection = new SqlConnection(...)) {
connection.Open();
// Stuff with the connection
connection.Close();
}
Я понимаю, почему это желательно - соединение устанавливается автоматически Dispose()
d, даже если то, что вы делаете посередине, вызывает неперехваченное исключение. Мне было просто интересно, что такое издержки для вызова new SqlConnection()
потенциально много раз, как это.
Пул соединений включен, поэтому я предполагаю, что издержки минимальны, и второй подход должен быть наилучшим, но я просто хотел убедиться, что мои предположения верны.