Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Problema com MySQL + Code First + Lazy Load!


Isso é exatamente o que está acontecendo, mas acho que não é exatamente a razão que você pensa. O DataReader ainda está aberto, não por causa da execução adiada no Linq, mas porque você ainda está iterando pelos resultados da consulta quando tenta acessar a outra propriedade que ainda não foi carregada. Quando você chama .ToList() os resultados são retornados de uma só vez e armazenados em um List<TEntity> na memória do cliente, em vez de ser retornado 1 registro por vez.

Você pode contornar isso no MS SQL Server usando a configuração MultipleActiveResultSets=true em sua string de conexão, mas o MySQL não suporta esta configuração. O que você deve ser capaz de fazer, porém, é carregar rapidamente os dados adicionais que você precisa usando .Include("tablename")
var houses = (from h in db.Houses.Include("Images")
              select h).Take(10);