Точно това се случва, но мисля, че не е точно по причината, която мислите. DataReader все още е отворен не поради отложено изпълнение в Linq, а защото все още преглеждате резултатите от заявката, когато се опитвате да получите достъп до другото свойство, което все още не е заредено. Когато извикате .ToList()
резултатите се връщат наведнъж и се съхраняват в List<TEntity>
в паметта на клиента, вместо да се връща по 1 запис наведнъж.
Можете да заобиколите това в MS SQL Server, като използвате настройката MultipleActiveResultSets=true
във вашия низ за връзка, но MySQL не поддържа тази настройка. Това, което трябва да можете да направите обаче, е нетърпеливо да заредите допълнителните данни, от които се нуждаете, като използвате .Include("tablename")
var houses = (from h in db.Houses.Include("Images")
select h).Take(10);