Bug description
Starting 10.0.2, the following code fails with System.InvalidCastException
var targetValue = new int?[] { null, 123 };
db.SampleEntities
.Where(e => targetValue.Contains(e.SampleField))
if ParameterTranslationMode set to Parameter
Works fine in 10.0.1.
Your code
public class SampleEntity
{
public int Id { get; set; }
public int? SampleField { get; set; }
}
public class AppDbContext : DbContext
{
public DbSet<SampleEntity> SampleEntities => Set<SampleEntity>();
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(
"Server=.;Database=sample;Trusted_Connection=True;TrustServerCertificate=True", options =>
{
options.UseParameterizedCollectionMode(ParameterTranslationMode.Parameter);
});
}
}
}
///
using var db = new AppDbContext();
var targetValue = new int?[] { null, 123 };
// works in 10.0.1
// fails in 10.0.2
db.SampleEntities
.Where(e => targetValue.Contains(e.SampleField))
.ToList();
Stack traces
Unhandled exception. System.InvalidCastException: Object must implement IConvertible.
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at Microsoft.EntityFrameworkCore.Storage.ValueConversion.ValueConverter`2.Sanitize[T](Object value)
at Microsoft.EntityFrameworkCore.Storage.ValueConversion.ValueConverter`2.<>c__DisplayClass2_0`2.<SanitizeConverter>b__1(Object v)
at Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping.CreateParameter(DbCommand command, String name, Object value, Nullable`1 nullable, ParameterDirection direction)
at Microsoft.EntityFrameworkCore.Storage.Internal.TypeMappedRelationalParameter.AddDbParameter(DbCommand command, Object value)
at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalParameterBase.AddDbParameter(DbCommand command, IReadOnlyDictionary`2 parameterValues)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.CreateDbCommand(RelationalCommandParameterObject parameterObject, Guid commandId, DbCommandMethod commandMethod)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.InitializeReader(Enumerator enumerator)
at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.<>c.<MoveNext>b__21_0(DbContext _, Enumerator enumerator)
at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Program.<Main>$(String[] args) in D:\Projects\eftest\Program.cs:line 19
Verbose output
EF Core version
10.0.2
Database provider
Microsoft.EntityFrameworkCore.SqlServer
Target framework
.net 10
Operating system
Windows 11
IDE
dotnet cli
Bug description
Starting 10.0.2, the following code fails with System.InvalidCastException
if
ParameterTranslationModeset toParameterWorks fine in 10.0.1.
Your code
Stack traces
Verbose output
EF Core version
10.0.2
Database provider
Microsoft.EntityFrameworkCore.SqlServer
Target framework
.net 10
Operating system
Windows 11
IDE
dotnet cli