2009-07-17 13 views
1

亜音速トランザクションエラー次のコードを考慮

 List<Processo> listaProcesso = new List<Processo>(); 

     Processo processo; 

     processo = new Processo(); 
     processo.AgendamentoID = 9; 
     processo.DataEntrada = DateTime.Now; 
     processo.EtapaExecucao = 0; 
     processo.RegistrosAfetados = 2; 
     listaProcesso.Add(processo); 

     processo = new Processo(); 
     processo.AgendamentoID = 9; 
     processo.DataEntrada = DateTime.Now; 
     processo.EtapaExecucao = 0; 
     processo.RegistrosAfetados = 1; 
     listaProcesso.Add(processo); 


     using (TransactionScope ts = new TransactionScope()) 
     { 
      using (SharedDbConnectionScope scs = new SharedDbConnectionScope()) 
      { 
       foreach (Processo processoSave in listaProcesso) 
       { 
        processoSave.Save(); 
       } 
      } 
      ts.Complete(); 
     } 

私はすべてのエラーを表示することはできません。しかし、save()が2回目に呼び出されると、MySqlExceptionが返されます。このConnectionに関連付けられている開いているDataReaderが既にあり、最初に閉じる必要があります。 私はSubsonic 3.0.0.3とMySql.Data 6.0.4.0を使用しています。

ありがとうございます。

カルロス・エドゥアルド・アペルクライン

答えて

0

うーん、エラーのルックスで私は他の場所で、アプリケーションで使用すると、DataReaderオブジェクト/たIDataReaderを使用していることを前提としていますし、あなたの「processo」のすべてのレコードを保存する前にそれを処分しませんでした。

また、内部でTransactionScopeを使用する必要があるため、使用する文を並べ替える必要があります。上にしようとしていることを実行する方法のコードスニペットについては、参照する必要がありますSubSonic Transaction link

0

このコードはアプリケーションであり、他にはコールがありません。このエラーをシミュレートするために構築しました。私は使用順序を変更しましたが、エラーは続きます。

ありがとうございました。

0

また、リストではなくProcessoCollectionを使用する必要があります。ループの中でアイテムをコレクションに追加し、myCollection.BatchSave()を呼び出します。

0

私は間違っている可能性がありますが、私はBatchSave()コマンドがSubSonic 3.0に存在しないと思います。

私はActiveRecordテンプレートを使用しています。 http://subsonicproject.com/docs/BatchQuery

1

ここにあなたの最善の策はBatchQueryを使用することです。

最新の亜音速ソースコードをダウンロードして、自分でコンパイルしてください。バグは亜音速コードにあるように見え、最新のコードベースに修正が適用されています。

0

アイブ氏は、この問題に対する解決策を見つけた: