2010-04-26 4 views
0

Должно ли устанавливаться соединение с базой данных внутри TransactionScope?Настройка подключения к базе данных при использовании TransactionScope

Или я могу установить его в ctor, а затем создать методы экземпляра TransactionScope?

EDIT:, например.

Public Sub New() 
    Dim conn = new SqlConnection(...connection string) 
Public Sub SomeClassMethod() 
    using ts as new TransactionScope 
     //conn has already been initialized 
     //so, here you can set commands, ExecuteDataSet, etc. 

против

Public Sub New() 
    //nothing here 
Public Sub SomeClassMethod()  
    using ts as new TransactionScope 
     conn = new SqlConnection(...connection string) 
     set commands, ExecuteDataSet, etc. 

Вопрос заключается вам нужно создать подключение к базе данных после того, как вы создали TransactionScope или это может быть сделано раньше?

+0

Вы можете уточнить немного больше? –

ответ

0

Если вы хотите, чтобы SqlConnection находился под транзакцией, вам необходимо создать его в TransactionScope.

using(TransactionScope scope = new TransactionScope()) 
{ 
    SqlConnection x = new SqlConnestion("...."); 
    x.Open(); 
    ....your code... SQlCommands etc.... 
    x.Close(); 
    scope.Complete(); 
} 
+0

Это эквивалентно созданию соединения сначала, затем области, а затем внутри области, вызывающей соединение.EnlistTransaction (Transaction.Current). Надеюсь, что так, потому что мне действительно нужно создать одно соединение FIRST, а затем передать его различным методам, создающим транзакцию ... и мне бы хотелось, чтобы эти методы привлекали существующее соединение в существующей области транзакций, m не создавать новые соединения во вложенных транзакционных областях, что приводит к их эскалации в распределенные транзакции (поскольку задействовано несколько подключений). – Triynko