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

Entity framework 发生异常时由两个不同的DBContext保存进行的回滚事务,entity-framework,Entity Framework,我需要保存到两个不同的数据库后,一些用户的行动。目前,我有以下几点: using (EFEntities1 dc = new EFEntities1()) { dc.USERS.Add(user); dc.SaveChanges(); } using (EFEntities2 dc = new EFEntities2()) { dc.USERS.Add(user); dc.SaveChanges(); } 这是同一方法中的两个独立代码块,因此我相信如果

我需要保存到两个不同的数据库后,一些用户的行动。目前,我有以下几点:

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

using (EFEntities2 dc = new EFEntities2())
{
     dc.USERS.Add(user);
     dc.SaveChanges();
}
这是同一方法中的两个独立代码块,因此我相信如果第二个失败,第一个不会回滚。如果出现故障,如何确保两个事务都回滚?

您可以将它们包装在一个文件中。请注意,这可能会调用


如果我向用户推出应用程序,他们是否需要在他们的机器上打开MSDTC,还是需要在服务器上打开一次?如果需要DTC,则必须将其同时放在机器和服务器上。但是,您可能需要,也可能不需要它-具体取决于您在做什么,以及SQL server版本…因此,如果我使用一个TransactionScope连接到两个不同的数据库,那么我需要DTC?我正在使用SQL Azure。我对SQL Azure不太熟悉-我最好的建议是尝试一下,看看是否需要它
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();
}