亚音速交易错误

时间:2009-07-17 13:50:55

标签: c# mysql subsonic transactions

考虑以下代码:

        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()时,我收到一个MySqlException:已经有一个与此Connection关联的打开DataReader,必须先关闭它。 我正在使用Subsonic 3.0.0.3和MySql.Data 6.0.4.0。

提前致谢。

Carlos Eduardo Appel Klein

6 个答案:

答案 0 :(得分:1)

这里最好的选择是使用BatchQuery: http://subsonicproject.com/docs/BatchQuery

答案 1 :(得分:0)

嗯,根据错误的外观,我会假设您在应用程序的其他地方使用DataReader / IDataReader并且在保存所有“processo”记录之前没有处理它。

您还需要重新订购using语句,因为TransactionScope需要在内部。有关如何执行上述尝试的代码段,您需要查看SubSonic Transaction link

答案 2 :(得分:0)

这段代码是应用程序,没有其他人调用。我建立模拟这个错误。我改变了使用顺序,但错误仍在继续。

感谢。

答案 3 :(得分:0)

此外,您应该使用ProcessoCollection而不是列表。在循环中,将您的项添加到集合中,然后调用myCollection.BatchSave();

答案 4 :(得分:0)

我可能错了,但我认为SubSonic 3.0中不存在命令BatchSave()。

忘记提及我正在使用ActiveRecord模板。

答案 5 :(得分:0)

我找到了解决这个问题的方法。

下载最新的亚音速源代码并自行编译。该错误似乎出现在亚音速代码中,修复程序已应用于最新的代码库。