Dat is precies wat er gebeurt, maar ik denk niet helemaal de reden die jij denkt. De DataReader is nog steeds open, niet vanwege uitgestelde uitvoering in Linq, maar omdat u nog steeds de queryresultaten doorloopt wanneer u probeert toegang te krijgen tot de andere eigenschap die nog niet is geladen. Wanneer u .ToList()
. aanroept de resultaten worden in één keer geretourneerd en opgeslagen in een List<TEntity>
in het geheugen op de client, in plaats van 1 record per keer te worden geretourneerd.
U kunt dit omzeilen in MS SQL Server met de instelling MultipleActiveResultSets=true
in uw verbindingsreeks, maar MySQL ondersteunt deze instelling niet. Wat u echter zou moeten kunnen doen, is gretig de aanvullende gegevens laden die u nodig hebt met behulp van .Include("tablename")
var houses = (from h in db.Houses.Include("Images")
select h).Take(10);