.NET Entity Framework - IEnumerable VS. IQueryable
Por favor, veja esta linha de código. Esta é uma invocação de um procedimento armazenado, que retorna umObjectResult<long?>
. Para extrair os valores longos, adicionei o Select:
dbContext.FindCoursesWithKeywords(keywords).Select(l => l.Value);
Com base no intellisense, esse Select retornaIEnumerable<long>
.
Não tenho certeza se li em algum lugar ou se acostumei a essa suposição - sempre pensei que quando a API EF retorna umIEnumerable
(e nãoIQueryable
) significa que os resultados foram materializados. Significando que eles foram retirados do banco de dado
Descobri hoje que estava errado (ou talvez seja um bug?). Continuei recebendo o erro
"Nova transação não é permitida porque existem outros threads em execução na sessão"
Basicamente, esse erro informa que você está tentando salvar alterações enquanto o leitor de banco de dados ainda está lendo registro
Eventualmente eu resolvi isso (o que eu considerava um tiro no escuro) e adicioneiToArray()
chamada para materializar oIEnumerable<long>
...
Assim - a linha inferior - devo esperarIEnumerable
resultados da EF para conter resultados que ainda não se materializaram? Se sim, existe uma maneira de saber se umIEnumerable
foi materializado ou não?
Obrigado e desculpas se esta for uma dessas perguntas 'duhhh' ...:)