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