考虑以下代码:
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
答案 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)
我找到了解决这个问题的方法。
下载最新的亚音速源代码并自行编译。该错误似乎出现在亚音速代码中,修复程序已应用于最新的代码库。