Как обрабатываются соединения в одной транзакции, когда мы открываем закрытые соединения для каждого оператора в C #?
Сценарий с такой же строкой соединения , и соединение открывается и закрываетсянесколько типов, один раз для каждого оператора.
Рассмотрим следующий пример
void updateSomething() {
using (SqlConnection connection = new SqlConnection(
"Integrated Security=SSPI;Initial Catalog=Northwind"))
{
connection.Open();
// Execute the statements
connection.Close();
}
}
Когда я выполняю следующий код:
void SomeMethod()
{
using(TransactionScope scope = new TransactionScope())
{
for(int i=0; i < 10; i++)
{
this.updateSomething();
}
scope.Complete();
}
}
Рекомендуется использоватьсоединение Open / Close для каждого оператора. Это потому, что мы на самом деле не создаем соединения, мы просто используем соединение из пула.
Почему это так? Я понимаю, что мы удерживаем соединение как можно меньше времени, но дело в том, что в большинстве транзакций мы получим его в следующий момент во время следующего оператора.
Это только дляизбегайте сложного времени вычисления кода между операторами, если такое существует (чего не должно быть, так как это блокировало бы базу данных в состоянии транзакции гораздо дольше, чем это необходимо).
Не имеет ли смыслаоставить одно соединение открытым на время транзакции?