Questo è esattamente ciò che sta accadendo, ma penso che non proprio per il motivo che pensi tu. Il DataReader è ancora aperto, non a causa dell'esecuzione posticipata in Linq, ma perché stai ancora scorrendo i risultati della query quando tenti di accedere all'altra proprietà che non è ancora stata caricata. Quando chiami .ToList()
i risultati vengono restituiti tutti in una volta e archiviati in un List<TEntity>
in memoria sul client, invece di ricevere 1 record alla volta.
Puoi aggirare questo problema in MS SQL Server usando l'impostazione MultipleActiveResultSets=true
nella stringa di connessione, ma MySQL non supporta questa impostazione. Quello che dovresti essere in grado di fare, tuttavia, è caricare ansiosamente i dati aggiuntivi di cui hai bisogno usando .Include("tablename")
var houses = (from h in db.Houses.Include("Images")
select h).Take(10);