.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' ...:)

questionAnswers(4)

yourAnswerToTheQuestion