Когда вы используете синтаксис as
, например ParentController as parentCtrl
, для определения контроллера, а затем для доступа к родительской переменной области действия в дочернем контроллере используйте следующее:
var id = $scope.parentCtrl.id;
Где parentCtrl
- имя родительского контроллера с использованием синтаксиса as
, а id
- переменная, определенная в том же контроллере.
ОК
Я создал образец приложения, похожий на пример из вопроса и послесловия, которые я проверил в БД, и ни одного пользователя не было добавлено.
Заключение: ObjectContext.SaveChange это автоматически транзакция.
Примечание: Я считаю, что транзакции потребуются при выполнении sprocs и т. д.
Я считаю (но я не очень давно разбираюсь в 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();
}
}
}