(По желанию):

сматривал свое заявление, и бывают случаи, когда только частьIQueryable фактически переводится в SQL-запрос, а остальная часть работы выполняется в оперативной памяти.

Я понимаю, что у команды EF нет возможности учесть каждое возможное выражение, которое разработчик может придумать, и волшебным образом преобразовать его в пригодный для использования SQL-запрос, но IIRC, EF, выдаст исключение, если не сможет перевести ВСЕ из операции, определенные вIQueryable в SQL.

Есть ли способ заставить EF Core также генерировать исключение или, по крайней мере, вызвать событие, когда он не может полностью перевестиIQueryable в SQL?

 Ivan Stoev06 дек. 2017 г., 21:11
ВидетьОценка клиента и сервера - Отключение оценки клиента Тема документации - пояснение и пример. Я думаю, что мы ничего не можем добавить.
 Brian Ball06 дек. 2017 г., 22:40
@ Иван, пожалуйста, напиши это как ответ, и я отмечу это правильно, это именно то, что я ищу! Я подозреваю, что не нашел его во время поиска, потому что для себя я не думаю о сервере приложений и сервере баз данных с точки зрения клиента и сервера, хотя они, безусловно, так и есть, поэтому я никогда не искал по этим словам.

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

Решение Вопроса

по крайней мере, вызвать событие, когда он не может полностью перевестиIQueryable в SQL?

Конечно. Во-первых, это концепция EF Core под названиемоценка клиента которого не было в pre EF Core (EF6.x). Это покрытоОценка клиента и сервера тема документации иОтключение оценки клиента В разделе объясняется поведение по умолчанию и как его можно изменить:

По умолчанию EF Core регистрирует предупреждение при выполнении оценки клиента. Видетьлогирование для получения дополнительной информации о просмотре результатов регистрации. Вы можете изменить поведение, когда происходит оценка клиента, либо выбросить, либо ничего не делать. Это делается при настройке параметров для вашего контекста - обычно вDbContext.OnConfiguringили вStartup.cs если вы используете ASP.NET Core.

Последнее достигается с помощьюConfigureWarnings методDbContextOptionsBuilder класс дляRelationalEventId.QueryClientEvaluationWarning, Действительные действияLog (по умолчанию),Ignore а такжеThrow (По желанию):

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    // ...
    optionsBuilder.ConfigureWarnings(warnings =>
        warnings.Throw(RelationalEventId.QueryClientEvaluationWarning));
}

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