TransactionScope и соединения с базой данных - PullRequest
5 голосов
/ 14 февраля 2011

Работает ли TransactionScope с закрытыми подключениями к базе данных?

using (var transaction = new TransactionScope(TransactionScopeOption.Required))
{
    // creates a new connection, does stuff, commit trans and close
    repos1.DoSomething(); 

    // creates a new connection, does stuff, commit trans and close
    repos2.DoSomething(); 

    transaction.Complete();
}

Ответы [ 2 ]

4 голосов
/ 15 февраля 2011

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close.aspx

Транзакции, запущенные через System.Transactions, контролируются инфраструктурой System.Transactions и не затрагиваются SqlConnection.Close.

Calling Closeпросто означает, что ваш код сделан с подключением.Если инфраструктуре ADO.NET по-прежнему требуется соединение (для завершения транзакции или для пула соединений), соединение остается открытым.

3 голосов
/ 15 февраля 2011

Да, это должно работать нормально.Внутренне, соединения должны оставаться открытыми до завершения транзакции.Имейте в виду, что DTC может потребоваться, если используется несколько соединений, даже если они находятся в одной базе данных.

Кроме того, вы не упоминаете, какую базу данных вы используете, но в MySQL были ошибкиреализация, которая заставила это не работать.Для MySQL это было исправлено в MySQL 5.1.3 .

...