ケース:
ウェブ設定で:
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は理由を閉じるために「古い」オプションを追加する必要があると思います。