Some posts ago I complained about my experience when using EF Core in combination with PostgreSQL. One of the things I didn’t liked was that when EF Core couldn’t translate a LINQ query, it silently felled back to client side evaluation, and executed the query on the in-memory collection.
This turns out not be specifically related to the EF Core implementation for PostgreSQL, but is in fact general behavior of .NET Core. I only didn’t noticed that the same thing happened with SQL Server as the EF Core provider for SQL Server is a lot smarter and can translate more LINQ queries correctly.
I said the following in the previous post:
The only way to discover this is through the logs where you see a warning when the driver couldn’t translate your LINQ statement. If you didn’t check the logs, you aren’t even aware of the issue.
Yesterday I discovered that you can change this behavior. Therefor I had to call the ConfigureWarnings() and set the following option:
Now every time the driver falls back to client side evaluation of a query, it will throw an error.
Remark: In EF Core 3 the default behavior will change and EF will throw an error any time a LINQ expression results in client side evaluation. You will then have the option to allow those client side evaluations.