Isso é exatamente o que está acontecendo, mas acho que não é exatamente a razão que você pensa. O DataReader ainda está aberto, não por causa da execução adiada no Linq, mas porque você ainda está iterando pelos resultados da consulta quando tenta acessar a outra propriedade que ainda não foi carregada. Quando você chama
.ToList()
os resultados são retornados de uma só vez e armazenados em um List<TEntity>
na memória do cliente, em vez de ser retornado 1 registro por vez. Você pode contornar isso no MS SQL Server usando a configuração
MultipleActiveResultSets=true
em sua string de conexão, mas o MySQL não suporta esta configuração. O que você deve ser capaz de fazer, porém, é carregar rapidamente os dados adicionais que você precisa usando .Include("tablename")
var houses = (from h in db.Houses.Include("Images")
select h).Take(10);