0

ユーザー操作の後、2 つの異なるデータベースに保存する必要があります。現在、私は以下を持っています:

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

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

これらは同じメソッド内の 2 つの別個のコード ブロックであるため、2 番目のコードが失敗した場合、最初のコードはロールバックされないと思います。何かが失敗した場合に両方のトランザクションが確実にロールバックされるようにするにはどうすればよいですか?

4

1 に答える 1

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();
}
于 2012-10-16T02:30:41.497 に答える