2

案子:

在网络配置中:

 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必须添加“过时”选项来关闭原因。

在此处输入图像描述

4

0 回答 0