To jest dokładnie to, co się dzieje, ale myślę, że nie do końca z tego powodu, o którym myślisz. DataReader jest nadal otwarty, nie z powodu odroczonego wykonania w Linq, ale ponieważ nadal wykonujesz iterację wyników zapytania podczas próby uzyskania dostępu do innej właściwości, która nie jest jeszcze załadowana. Kiedy wywołujesz .ToList()
wyniki są zwracane jednocześnie i przechowywane w List<TEntity>
w pamięci klienta, zamiast zwracania 1 rekordu na raz.
Możesz obejść ten problem w MS SQL Server za pomocą ustawienia MultipleActiveResultSets=true
w ciągu połączenia, ale MySQL nie obsługuje tego ustawienia. To, co powinieneś być w stanie zrobić, to niecierpliwie załadować dodatkowe dane, których potrzebujesz, używając .Include("tablename")
var houses = (from h in db.Houses.Include("Images")
select h).Take(10);