DataContext по умолчанию выбирает внешнюю транзакцию, так что это просто вопрос обеспечения наличия транзакции в области действия. Детали становятся главной проблемой:
- Какие опции вам нужны (например, уровень изоляции)
- Требуется ли новая транзакция или повторно использовать существующую транзакцию (например, для операции аудита / ведения журнала может потребоваться новая транзакция, чтобы ее можно было зафиксировать даже в случае сбоя всей бизнес-операции и, следовательно, откат внешней транзакции).
Это упрощенный код прототипа, в реальном коде используются помощники для создания транзакций с опциями, управляемыми политикой (одна из целей прототипа заключалась в изучении влияния этих опций).
using (var trans = new TransactionScope(
TransactionScopeOption.Required,
new TransactionOptions {
IsolationLevel = IsolationLevel.ReadCommitted
},
EnterpriseServicesInteropOption.Automatic)) {
// Perform operations using your DC, including submitting changes
if (allOK) {
trans.Complete();
}
}
Если Complete () не вызывается, транзакция будет откатываться. Если имеется содержащая область транзакции, то для выполнения изменений в базе данных необходимо завершить как внутреннюю, так и внешнюю транзакции.