发生异常时,由两个不同的DBContext进行的回滚事务会保存

时间:2012-10-16 02:12:42

标签: entity-framework

我需要在用户操作后保存到两个不同的数据库。目前,我有以下内容:

using (EFEntities1 dc = new EFEntities1())
{
     dc.USERS.Add(user);
     dc.SaveChanges();
}

using (EFEntities2 dc = new EFEntities2())
{
     dc.USERS.Add(user);
     dc.SaveChanges();
}

这是同一方法中的两个独立代码块,所以我相信如果第二个代码块失败,第一个代码块将不会回滚。如果出现故障,如何确保两个事务都回滚?

1 个答案:

答案 0 :(得分:2)

您可以将它们包裹在TransactionScope中。请注意,这可能会调用DTC

using (TransactionScope scope = new TransactionScope())  
{
  using (EFEntities1 dc = new EFEntities1())
  {
     dc.USERS.Add(user);
     dc.SaveChanges();
  }

  using (EFEntities2 dc = new EFEntities2())
  {
     dc.USERS.Add(user);
     dc.SaveChanges();
  }

  scope.complete();
}