.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 материализовался или нет?

Спасибо и прошу прощения, если это один из тех «духовых» вопросов ... :)

Ответы на вопрос(4)

Ваш ответ на вопрос