PetaPoco我应该使用MultipleActiveResultSets = True吗?

时间:2013-04-26 19:21:39

标签: sql-server-2008 asp.net-mvc-4 database-connection petapoco

我们有时会在ASP.NET MVC 4应用程序中从PetaPoco收到以下数据库连接错误:

There is already an open DataReader associated with this Command which must be closed first.;
System.Data;    at System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command)...    

似乎这种情况发生了,因为我们对系统的负担越来越大。

我们在研究过程中发现的一些建议是:

  • 执行PetaPoco Fetch而不是查询
  • 将MultipleActiveResultSets = True添加到我们的连接字符串

有PetaPoco经验的人可以验证这些建议会有所帮助吗? 任何其他建议,以避免异常将不胜感激。

2013年10月10日更新我们将查询更改为获取,我们看到了一些改进,但我们有时仍会看到错误。

有谁知道缺点将连接字符串更改为 MultipleActiveResultSets = True 可能有什么?

1 个答案:

答案 0 :(得分:2)

确保您按照请求创建PetaPoco数据库(不是静态)。

请参阅:how to create a DAL using petapoco

2013年10月10日更新所有Fetch方法都会调用Query方法(参见来源)

enter image description here

因此更改另一个对错误无影响

这些缺点列在MSDN上,并包含警告:

  • 声明交错
  • 会话缓存
  • 线程安全
  • 连接池
  • 并行执行

我亲自试过并且没有任何缺点(取决于你的应用程序),但也没有摆脱错误。

你唯一可以做的就是删除错误,按照你的请求代码找到代码中两次调用语句的位置,然后在该函数中使用其他数据库连接。

此外,您可以捕获错误,然后创建一个新的数据库连接并尝试使用新的连接。

对不起,但不是魔术子弹。