2009-07-17 8 views
1

Vu le code suivant:Subsonic Erreur de transaction

 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(); 
     } 

Je ne vois aucune erreur. Mais, quand le save() est appelé pour la deuxième fois, je reçois une exception MySqlException: Il y a déjà un DataReader ouvert associé à cette connexion qui doit d'abord être fermé. J'utilise Subsonic 3.0.0.3 et MySql.Data 6.0.4.0.

Merci d'avance.

Carlos Eduardo Appel Klein

Répondre

0

Hmmm, par les regards de l'erreur je suppose que ailleurs dans votre application que vous utilisez un DataReader/IDataReader et ne réglait pas avant d'enregistrer tous vos dossiers « Processo » .

Vous devez également réorganiser vos instructions using car le TransactionScope doit être à l'intérieur. Pour un extrait de code sur la façon d'effectuer ce que vous essayez de faire ci-dessus, vous devez regarder SubSonic Transaction link

0

Ce morceau de code est l'application, il n'y a pas d'autres appels. J'ai construit pour simuler cette erreur. J'ai changé l'ordre d'utilisation, mais l'erreur continue.

Merci.

0

De même, vous devriez utiliser un ProcessoCollection plutôt qu'une liste. Dans la boucle, ajoutez vos éléments à la collection, puis appelez myCollection.BatchSave();

0

Je peux me tromper, mais je pense que la commande BatchSave() n'existe pas dans SubSonic 3.0. J'ai oublié de mentionner que j'utilise les modèles ActiveRecord.

0

Ive a trouvé une solution à ce problème.

Allez télécharger le dernier code source subsonique et compilez-le vous-même. Le bogue semble être dans le code subsonique et un correctif a été appliqué à la dernière base de code.

Questions connexes