2

ケース:

ウェブ設定で:

 MultipleActiveResultSets=true

Web リクエストには 2 つの個別の接続があります。

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 拡張機能を使用すると、ランダムな「リーダーが閉じているときに 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