Não se trata de fechar a conexão. O EF gerencia a conexão corretamente. Meu entendimento desse problema é que existem vários comandos de recuperação de dados executados em uma única conexão (ou comando único com várias seleções) enquanto o próximo DataReader é executado antes que o primeiro tenha concluído a leitura. A única maneira de evitar a exceção é permitir vários DataReaders aninhados =ativar MultipleActiveResultSets. Outro cenário em que isso sempre acontece é quando você itera pelo resultado da consulta (IQueryable) e aciona o carregamento lento para a entidade carregada dentro da iteração.