Đó chính xác là những gì đang xảy ra, nhưng tôi nghĩ không hoàn toàn vì lý do như bạn nghĩ. DataReader vẫn đang mở, không phải do thực thi bị trì hoãn trong Linq, mà bởi vì bạn vẫn đang lặp lại các kết quả truy vấn khi bạn cố gắng truy cập vào thuộc tính khác chưa được tải. Khi bạn gọi .ToList()
kết quả được trả về cùng một lúc và được lưu trữ trong List<TEntity>
trong bộ nhớ trên máy khách, thay vì được trả lại 1 bản ghi tại một thời điểm.
Bạn có thể giải quyết vấn đề này trong MS SQL Server bằng cách sử dụng cài đặt MultipleActiveResultSets=true
trong chuỗi kết nối của bạn, nhưng MySQL không hỗ trợ cài đặt này. Tuy nhiên, điều bạn có thể làm là tải dữ liệu bổ sung bạn cần bằng cách sử dụng .Include("tablename")
var houses = (from h in db.Houses.Include("Images")
select h).Take(10);