Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Problem mit MySQL + Code First + Lazy Load!

Das ist genau das, was passiert, aber ich denke, aus nicht ganz dem Grund, aus dem Sie denken. Der DataReader ist immer noch geöffnet, nicht wegen der verzögerten Ausführung in Linq, sondern weil Sie immer noch die Abfrageergebnisse durchlaufen, wenn Sie versuchen, auf die andere Eigenschaft zuzugreifen, die noch nicht geladen ist. Wenn Sie .ToList() aufrufen die Ergebnisse werden alle auf einmal zurückgegeben und in einer List<TEntity> gespeichert im Arbeitsspeicher auf dem Client, statt jeweils einen Datensatz zurückzugeben.

Dies können Sie im MS SQL Server mit der Einstellung MultipleActiveResultSets=true umgehen in Ihrer Verbindungszeichenfolge, aber MySQL unterstützt diese Einstellung nicht. Was Sie jedoch tun können, ist, die zusätzlichen Daten, die Sie benötigen, mit .Include("tablename") eifrig zu laden

var houses = (from h in db.Houses.Include("Images")
              select h).Take(10);