案例:
在网络配置中:
MultipleActiveResultSets=true
Web请求中有两个单独的连接:
public IDbConnection GetOpenConnection()
{
var connection = ConnectionFactory.OpenDbConnection();
return connection;
}
using (var con = GetOpenConnection())
{
var users = con.Select<User>(@"Select * from User (nolock)");
}
using (var con = GetOpenConnection())
{
var classrooms= con.Select<Classroom>(@"Select * from Classroom (nolock)");
}
但是如果我使用新的IDbConnection Extensions,则随机“无效尝试在读取器关闭时调用读取”异常。
这是怀疑ServiceStack.OrmLite方法:
public static T Exec<T>(this IDbConnection dbConn, Func<IDbCommand, T> filter)
{
var holdProvider = OrmLiteConfig.TSDialectProvider;
try
{
var ormLiteDbConn = dbConn as OrmLiteConnection;
if (ormLiteDbConn != null)
OrmLiteConfig.TSDialectProvider = ormLiteDbConn.Factory.DialectProvider;
using (var dbCmd = dbConn.CreateCommand())
{
dbCmd.Transaction = OrmLiteConfig.CurrentTransaction;
var ret = filter(dbCmd);
LastCommandText = dbCmd.CommandText;
return ret;
}
}
finally
{
OrmLiteConfig.TSDialectProvider = holdProvider;
}
}
有什么想法吗?
更新
我在OrmLiteUtilExtensions中从ConvertToList收到同样的错误。
6年后更新
我的问题太旧了。我不认为问题仍在继续,很可能这个问题已经过时了。但由于“过时”,没有办法解决这个问题。我认为,SO必须添加“过时”的选项来结束理由。