Hi Team,
We are upgrading our existing application (Asp.net Core MVC + Jquery with framework .net2.1 and version 6.2.1.) to .net 8 and version 13.1.1. following documentation (Version-Updating).
We have successfully build and run project after resolving conflicts. Now problem is that ABP latest version 9.2.2 is using EF Core 8 and our Linq queries which was working fine before upgrade (EF Core 2.1.4). Now below exception is occuring due to Entity Framework Core 3.x and later versions introduced stricter rules for translating LINQ queries to SQL.
Database: Azure SQL Database and Compatibility Level is 140
Example of Linq Query:
var recurrenceLst = _activityRepository.GetAllIncluding(x => x.CustomerFk, x => x.ContactFk) .Where(x => x.StatusId != (int)Status.Completed && x.IsRecurring && ((x.RecurrenceType == RecurrenceType.Monthly && (x.RecurrenceMonthDay == DateTime.Today.Day || (x.RecurrenceMonthDay > lastDayOfMonth && DateTime.Today.Day == lastDayOfMonth))) || (x.RecurrenceType == RecurrenceType.Weekly && x.RecurrenceWeekDay == (WeekDay)((int)DateTime.Today.DayOfWeek + 1)))).ToList();
Exception: The LINQ expression 'DbSet<Activity>() .Where(a => __ef_filter__p_0 || (int?)((IMustHaveTenant)a).TenantId == __ef_filter__CurrentTenantId_1) .Where(a => a.StatusId != 2 && a.IsRecurring && (int?)a.RecurrenceType == (int?)Monthly && a.RecurrenceMonthDay == (int?)DateTime.Today.Day || a.RecurrenceMonthDay > __lastDayOfMonth_0 && DateTime.Today.Day == __lastDayOfMonth_1 || (int?)a.RecurrenceType == (int?)Weekly && (int?)a.RecurrenceWeekDay == (int?)(WeekDay)((int)DateTime.Today.DayOfWeek + 1))' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'. See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.
Solution Tried: We have thousands of Linq queries in a project and to avoid rewrite query and to load a lot of data in Memory and then filter, we tried to keep previous version of EFCore (2.1.4) and all related packages of EF Core to (2.1.4) But no success, project doesn't run and get another exception in LoadStopDbContextConfigurer file at builder.UseSqlServer(connectionString);
Exception System.TypeLoadException: 'Method 'get_Info' in type 'Microsoft.EntityFrameworkCore.SqlServer.Infrastructure.Internal.SqlServerOptionsExtension' from assembly 'Microsoft.EntityFrameworkCore.SqlServer, Version=2.1.4.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' does not have an implementation.'
Please give a solution or suggestion. Right now its not possible to rewrite thousands of Linq Queries according to EF Core 8. What we can do to support current written Linq queries?
5 Answer(s)
-
0
Hi @razkhan78,
Could you share your nuget packages(with versions) at *.EntityFrameworkCore project
-
0
-
0
Hi @razkhan78
You should either stay at EF Core 2.1 and downgrade your ABP packages or you need to use EF Core 8.x and fix your queries. There was a switch to enable client side evaluation but it is not availabe anymore in EF Core I think.
-
0
we tried to stay at EF Core 2.1 without downgrade ABP packages (we cannot downgrade ABP packages because we are upgrading) but another exception comes as I have mentioned above in solution tried section and project doesn't run.
Is there any other solution other than fix queries?
-
0
Hi,
As far as I know, no. Because EF Core 2.1 and some of .NET Core 8 packages are using some common libraries and probably your app is loading different version of some of the packages and it causes runtime errors.
In many apps moving from EF Core 2.1 to 3.x developed by AspNet Zero, there shouldn't be many queries to fix. You can give it a try.