2011-07-20 6 views
0

Entity Framework 4とFirebirdデータベースでトランザクションスコープを使用する必要があります。私はFireBird Entity Frameworkプロバイダを使用しています。FirebirdとEntity Frameworkトランザクションロールバック

問題は、オブジェクトに対してSaveChangesが呼び出されると、transactionScope.Complete()が呼び出されたときではなく、データがデータベースに保存されるということです。これにより、使用(TransactionScope ...)ブロック内で例外が発生しても、データがロールバックされることはありません。

これはFireBird DBに問題があるようですが、私はMS SQL 2008と正確に同じコードをテストして、RollBackが正しく動作しています。

FireBirdでローリングバックを有効にするには何が必要ですか?

using (var context = new Model1Container()) 
     { 
      bool success = false; 
      using (TransactionScope transactionScope = new TransactionScope()) 
      { 
       PERSON person = new PERSON(); 
       person.NAME = "test"; 
       context.AddToPERSON(person); 
       context.SaveChanges(SaveOptions.DetectChangesBeforeSave); 
       success = true; 
       //transactionScope.Complete(); If this line is not hit, Transaction should Roll Back, but it does not. 
      } 

      if (success) 
      { 
       context.AcceptAllChanges(); 
      } 
     } 
+0

接続文字列に自動コミットがありますか? – BennyM

+0

EntityClient接続文字列にauto-commit = falseを設定する方法はありますか? – Zpock

+0

エンティティクライアントの接続文字列のどこかに、普通の古い接続文字列があります。エンティティクライアントの接続文字列内の "connection string ="を探します。 – BennyM

答えて

3

firebirdの場合、接続文字列にEnlist = Trueを追加することで参加する必要があることを明示的に述べる必要があります。

+0

ありがとうございます!それは私の仕事です。 –

関連する問題