1

私はEntityFrameworkの初心者です。私は非常に奇妙な問題に直面しています。linqtoentityクエリを使用したトランザクションを使用できません。私はDbTransactionとTransactionScopeに使用しました。クエリがヒットするとすぐにエラーが発生します。EF4.3を使用しています。コンテキストは通常​​どおりDbContextから派生します。私はコードファーストアプローチを使用しています。

        using (TransactionScope s = new TransactionScope())
        {
         using(var context = new XYZContext())
         {   
               context.Database.Connection.Open();
               Int32 count = (from xyz in context.XYZs
                           where xyz.Name == "SameName"
                           select xyz.Name).Count();
               Assert.AreEqual(count, 1);
          }
        }

疑問があります。TrasactionScopeにはパフォーマンスの問題があると聞いたので、使用したくありません。では、代わりにDbTransactionを使用するにはどうすればよいですか(エラーもスローされます)。なぜ接続を明示的に開く必要があるのですか?コンテキストを「更新」しているときに、接続が自動的に開かれるべきではありませんか?

4

1 に答える 1

1

トランザクションを開始する前に、using句を反転して接続を開き、コンテキストを使用してトランザクションを開いてみてください。コードが更新を行っている場合も、トランザクションをコミットする必要があります。

using(var context = new XYZContext())
  {   
      context.Database.Connection.Open();
      using (TransactionScope s = context.Connection.BeginTransaction())
      {

          Int32 count = (from xyz in context.XYZs
                           where xyz.Name == "SameName"
                           select xyz.Name).Count();
          Assert.AreEqual(count, 1);
          s.Commit()
        }
   }
于 2012-10-11T09:33:13.533 に答える