С точки зрения того, как вы используете TransactionScope
класс , да, это правильно, вы обычно используете шаблон:
// Use overloads of constructor if you need to fine-tune the transaction
using (var tx = new TransactionScope())
{
// Do your work.
// Call Complete if the work is truly complete.
// Note, if you determine through logic, you don't
// have to call Complete.
tx.Complete();
}
Как только вы вызовете метод Complete
, это будет означать, что текущий Transaction
готов к фиксации. Обратите внимание, что транзакция совершается не во время вызова Complete
, а при удалении TransactionScope
.
Из документации на TransactionScope.Complete
:
Фактическая работа коммита между менеджером ресурсов происходит на
Оператор End Using, если объект TransactionScope создал объект
сделка.
Кроме того, как указано в комментариях к примеру кода, это сознательное решение о том, следует ли делать вызов Complete
.
Опять же, из документации для TransactionScope.Complete
(выделено мной):
Когда вы удовлетворены , что все операции в рамках
завершено успешно, вы должны вызывать этот метод только один раз, чтобы
сообщить диспетчеру транзакций, что состояние всех ресурсов
и транзакция может быть совершена.
Теперь, что касается возможности использования TransactionScope
с Entity Framework, ответ - да, поскольку документация по MSDN под названием «Как: управлять транзакциями в Entity Framework» указывает .