Как я могу включить транзакции мои коды с linqto SQL? - PullRequest
2 голосов
/ 29 июня 2010

если пишете ниже коды: ошибка returns.i как советуют:
/601726/kak-ispolzovat-transactionscope-v-c
Но только изменение ошибки: Менеджер транзакций партнера отключил поддержку удаленных / сетевых транзакций. Исключение из HRESULT: 0x8004D025

Я использую Windows Server 2003.


 using (var stockMovementCtx = new StockMovementCtxDataContext())
            {
                using (var scope = new TransactionScope())
                {

// do something....
}
scope.Complete();
}

но если я изменил свои коды; все в порядке:


using (var stockMovementCtx = new StockMovementCtxDataContext())
            {


// do something....

}

Как я могу решить ниже ошибки. Это действительно важно. Пожалуйста, помогите мне: ((((

Ответы [ 2 ]

3 голосов
/ 29 июня 2010

TransactionScope будет повышен до DTC при необходимости. Похоже, что код неисправности настроен неправильно, обычно из-за ограничений брандмауэра. Попробуйте dtcping между серверами (важно: в обоих направлениях).

1 голос
/ 29 июня 2010

DataContext по умолчанию переносит все операции в Transaction, поэтому вам не нужно явно выполнять транзакцию при работе с DataContext.Прочитайте this .

http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.aspx

using (var stockMovementCtx = new StockMovementCtxDataContext())
{
     // do something....


     //everything until this point is within the transaction.
     stockMovementCtx.SubmitChange();
}

Зачем нам нужен TransactionScope?

TransactionScope позволяет выполнять транзакцииза пределами данных.Допустим, у вас есть ряд операций, как показано ниже, и все они являются атомарными, и их необходимо выполнить в транзакции.

1.) Добавить запись в таблицу 1
2.) Добавить запись в таблицу 2
3.) Записать НОВЫЙ файл на диск
4.) Переименовать файл X на диске
5.) Обновить запись файла в таблице 3

Если вы используете SqlTransaction, то только операция 1,3и 5 могут участвовать в транзакции, но 3 и 4 не могут, потому что они вообще не связаны с базой данных.В таких случаях TrasanctionScope может помочь вам.TransactionScope использует MSDTC (координатор распределенного Trasanction), который может помочь вам выполнять транзакции вне контекста базы данных.Вы можете обернуть все пять операций внутри транзакции TransactionScope и выполнить их атомарно.Стоит также отметить, что TransactionScope поддерживает вложенные транзакции, то есть один блок транзакций может содержать несколько наборов транзакций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...