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 поддерживает вложенные транзакции, то есть один блок транзакций может содержать несколько наборов транзакций.