Как откатывать транзакцию в Платформе Объекта

Когда вы используете синтаксис as, например ParentController as parentCtrl, для определения контроллера, а затем для доступа к родительской переменной области действия в дочернем контроллере используйте следующее:

var id = $scope.parentCtrl.id;

Где parentCtrl - имя родительского контроллера с использованием синтаксиса as, а id - переменная, определенная в том же контроллере.

9
задан Shimmy 1 July 2009 в 17:49
поделиться

2 ответа

ОК

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

Заключение: ObjectContext.SaveChange это автоматически транзакция.

Примечание: Я считаю, что транзакции потребуются при выполнении sprocs и т. д.

12
ответ дан 4 December 2019 в 10:33
поделиться

Я считаю (но я не очень давно разбираюсь в EF), что до вызова context.SaveChanges через, транзакция не запускается. Я ожидал, что исключение из этого вызова автоматически откатит любую запущенную транзакцию. Альтернативы (на случай, если вы хотите контролировать транзакцию) [из J.Lerman's "Programming Entity Framework" O'Reilly, pg. 618]

using (var transaction = new System.Transactions.TransactionScope())
{
  try
  {
    context.SaveChanges();
    transaction.Complete();
    context.AcceptAllChanges();
  }
  catch(OptimisticConcurrencyException e)
  {
    //Handle the exception
    context.SaveChanges();
  }
}

или

bool saved = false;
using (var transaction = new System.Transactions.TransactionScope())
{
  try
  {
    context.SaveChanges();
    saved = true;
  }
  catch(OptimisticConcurrencyException e)
  {
    //Handle the exception
    context.SaveChanges();
  }
  finally
  {
    if(saved)
    {
      transaction.Complete();
      context.AcceptAllChanges();
    }
  }

}
8
ответ дан 4 December 2019 в 10:33
поделиться
Другие вопросы по тегам:

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