См. эту строку кода. Это вызов хранимой процедуры, которая возвращает ObjectResult<long?>
. Чтобы извлечь длинные значения, я добавил Select:
dbContext.FindCoursesWithKeywords(keywords).Select(l => l.Value);
На основе intellisense этот Select возвращает IEnumerable<long>
.
Я не уверен, читал ли я его где-то или, может быть, просто привык к этому предположению - я всегда думал, что когда EF API возвращает IEnumerable
(а не IQueryable
), это означает, что результаты были материализовались. Это означает, что они были извлечены из базы данных.
Сегодня я узнал, что я ошибся (или, может быть, это ошибка?). Я продолжал получать ошибку
"Новая транзакция не допускается, потому что есть другие потоки запуск в сеансе"
В основном, эта ошибка говорит вам, что вы пытаетесь сохранить изменения, пока читатель db все еще читает записи.
В конце концов я решил это (что я считал длинным выстрелом) и добавил вызов ToArray()
для материализации IEnumerable<long>
...
Итак - нижняя строка - следует ли ожидать, что IEnumerable
результаты из EF будут содержать результаты, которые еще не материализовались? Если да, то есть ли способ узнать, материализовался ли IEnumerable
?
Спасибо и извини, если это один из тех вопросов "duhhh"...:)