Entity Frameworkを使用していますが、このエラーが発生することがあります。
EntityCommandExecutionException
{"There is already an open DataReader associated with this Command which must be closed first."}
   at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands...
手動の接続管理は行っていませんが。
このエラーは断続的に発生します。
エラーをトリガーするコード(読みやすくするために短縮):
        if (critera.FromDate > x) {
            t= _tEntitites.T.Where(predicate).ToList();
        }
        else {
            t= new List<T>(_tEntitites.TA.Where(historicPredicate).ToList());
        }
毎回新しい接続を開くためにDisposeパターンを使用します。
using (_tEntitites = new TEntities(GetEntityConnection())) {
    if (critera.FromDate > x) {
        t= _tEntitites.T.Where(predicate).ToList();
    }
    else {
        t= new List<T>(_tEntitites.TA.Where(historicPredicate).ToList());
    }
}
まだ問題がある
接続が既に開いている場合、EFはその接続を再利用しないのはなぜですか。
predicateとhistoricPredicate変数のタイプを知りたいです。あなたがそれに渡しFunc<T, bool>た場合、Where()コンパイルされて動作する場合があることを発見しました(メモリ内の「場所」を実行するため)。あなたがしなければならないことは、に渡すExpression<Func<T, bool>>ことWhere()です。