C'est exactement ce qui se passe, mais je pense que ce n'est pas tout à fait la raison pour laquelle vous pensez. Le DataReader est toujours ouvert, non pas à cause de l'exécution différée dans Linq, mais parce que vous parcourez toujours les résultats de la requête lorsque vous essayez d'accéder à l'autre propriété qui n'est pas encore chargée. Lorsque vous appelez .ToList()
les résultats sont renvoyés en une seule fois et stockés dans une List<TEntity>
en mémoire sur le client, au lieu d'être renvoyé 1 enregistrement à la fois.
Vous pouvez contourner ce problème dans MS SQL Server en utilisant le paramètre MultipleActiveResultSets=true
dans votre chaîne de connexion, mais MySQL ne prend pas en charge ce paramètre. Ce que vous devriez pouvoir faire, cependant, est de charger avec impatience les données supplémentaires dont vous avez besoin en utilisant .Include("tablename")
var houses = (from h in db.Houses.Include("Images")
select h).Take(10);