Itulah tepatnya yang terjadi, tetapi saya pikir bukan karena alasan yang Anda pikirkan. DataReader masih terbuka, bukan karena penundaan eksekusi di Linq, tetapi karena Anda masih mengulangi hasil kueri saat mencoba mengakses properti lain yang belum dimuat. Saat Anda memanggil .ToList()
hasilnya dikembalikan sekaligus dan disimpan dalam List<TEntity>
di memori pada klien, bukannya dikembalikan 1 record pada satu waktu.
Anda dapat menyiasatinya di MS SQL Server menggunakan pengaturan MultipleActiveResultSets=true
di string koneksi Anda, tetapi MySQL tidak mendukung pengaturan ini. Namun, yang seharusnya dapat Anda lakukan adalah memuat data tambahan yang Anda perlukan menggunakan .Include("tablename")
var houses = (from h in db.Houses.Include("Images")
select h).Take(10);