案子:
在网络配置中:
MultipleActiveResultSets=true
Web Request 中有两个独立的连接:
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,则会出现随机的“阅读器关闭时调用 Read 的尝试无效”异常。
而这疑似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必须添加“过时”选项来关闭原因。