Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL + Code First + problema di Lazy Load!

Questo è esattamente ciò che sta accadendo, ma penso che non proprio per il motivo che pensi tu. Il DataReader è ancora aperto, non a causa dell'esecuzione posticipata in Linq, ma perché stai ancora scorrendo i risultati della query quando tenti di accedere all'altra proprietà che non è ancora stata caricata. Quando chiami .ToList() i risultati vengono restituiti tutti in una volta e archiviati in un List<TEntity> in memoria sul client, invece di ricevere 1 record alla volta.

Puoi aggirare questo problema in MS SQL Server usando l'impostazione MultipleActiveResultSets=true nella stringa di connessione, ma MySQL non supporta questa impostazione. Quello che dovresti essere in grado di fare, tuttavia, è caricare ansiosamente i dati aggiuntivi di cui hai bisogno usando .Include("tablename")

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