Как использовать транзакции с datacontext

Похоже, что маршрут маршрутизации неверен, поэтому измените маршрут в login component следующим образом

const url = `${'logged/' + this.username + '/' + this.password}`;
this.router.navigate([url]);
17
задан RoastBeast 7 July 2015 в 21:07
поделиться

3 ответа

Я постоянно использую их при тестировании :)

try
{
  dc.Connection.Open();
  dc.Transaction = dc.Connection.BeginTransaction();

  dc.SubmitChanges();
}
finally
{
  dc.Transaction.Rollback();
}

ОБНОВЛЕНИЕ

Это ВСЕГДА приведет к откату постфактум. Я использую это при тестировании.

18
ответ дан 30 November 2019 в 10:27
поделиться

Вероятно, что-то вроде этого:

try
{
    using (TransactionScope scope = new TransactionScope())
    {
        //Do some stuff

        //Submit changes, use ConflictMode to specify what to do
        context.SubmitChanges(ConflictMode.ContinueOnConflict);

        scope.Complete();
    }
}
catch (ChangeConflictException cce)
{
        //Exception, as the scope was not completed it will rollback
}
10
ответ дан 30 November 2019 в 10:27
поделиться

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 () не вызывается, транзакция будет откатана.

15
ответ дан 30 November 2019 в 10:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: