Eso es exactamente lo que está sucediendo, pero creo que no es exactamente por la razón que piensas. El DataReader todavía está abierto, no debido a la ejecución diferida en Linq, sino porque todavía está iterando a través de los resultados de la consulta cuando intenta acceder a la otra propiedad que aún no está cargada. Cuando llamas a .ToList()
los resultados se devuelven todos a la vez y se almacenan en una List<TEntity>
en la memoria del cliente, en lugar de devolver 1 registro a la vez.
Puede evitar esto en MS SQL Server usando la configuración MultipleActiveResultSets=true
en su cadena de conexión, pero MySQL no admite esta configuración. Sin embargo, lo que debería poder hacer es cargar con entusiasmo los datos adicionales que necesita usando .Include("tablename")
var houses = (from h in db.Houses.Include("Images")
select h).Take(10);