Closed shvmgpt116 closed 1 year ago
Yes, it is not supported (yet). Though I am trying to understand what query is doing exactly. Why are you calling need to call ToString
on a string column?
@smitpatel thanks for the update. There is probably no need to call ToString(). But calling ToString() on a string column should cause no harm. But in this case, it returns an error.
Could the issue be because there is no mapping available in the _typeMapping dictionary for string type in "SqlServerObjectToStringTranslator" class. https://github.com/dotnet/efcore/blob/release/3.1/src/EFCore.SqlServer/Query/Internal/SqlServerObjectToStringTranslator.cs
And would adding a mapping in this class resolve the issue?
If yes, what shall it map to? Shall it map to VARCHAR or NVARCHAR.
It shouldn't be added to dictionary. Rather if ToString is called on a string column then the string column should be returned.
I am simply calling .ToString() on an Int and it errors with Framework version 6.44. I rolled back to version 6.20 and no issues. I have been do this for several years with previous versions so this is some new problem introduced after 6.20. There is a valid reason to use .ToString() so text searches of multiple concatenated columns can be performed on that database server using SQL rather than pulling all your data down first to perform searches.
I am running a sample test in SqlServer where it is using ToString() on a string column (COL2) in the LINQ. The test is giving following error when trying to generate SELECT query from the LINQ.
Unhandled exception. System.InvalidOperationException: The LINQ expression 'DbSet
.Where(t => t.COL2.ToString().Contains(__url_0))' 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 either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync().
Not using ToString() for string column works fine. Using any other type (for ex:- int) for COL2 with ToString() also works fine. Using ToString() for string type only gives the issue. I am not sure if this is expected. It seems a basic scenario to support. Please could anyone confirm?
Here is the sample test-
Steps to reproduce
Simply run the above-provided test case-
Stacktrace
Further technical details
EF Core version: Microsoft.EntityFrameworkCore 3.1.3 Database provider: Microsoft.EntityFrameworkCore.SqlServer Target framework: .NET Core 3.0 Operating system: Windows 10 IDE: Visual Studio 2019 16.4.2