-
Type:
Bug
-
Resolution: Duplicate
-
Priority:
Unknown
-
None
-
Affects Version/s: 8.0.0, 9.0.0, 10.0.0
-
Component/s: None
-
None
-
None
-
Dotnet Drivers
-
None
-
None
-
None
-
None
-
None
-
None
Exception:
System.ArgumentException GenericArguments[1], 'System.DayOfWeek', on 'MongoDB.Bson.Serialization.Serializers.DowncastingSerializer`2[TBase,TDerived]' violates the constraint of type 'TDerived'. at System.RuntimeType.ValidateGenericArguments(MemberInfo definition, RuntimeType[] genericArguments, Exception e) at System.RuntimeType.MakeGenericType(Type[] typeArguments) at MongoDB.Bson.Serialization.Serializers.DowncastingSerializer.Create(Type baseType, Type derivedType, IBsonSerializer derivedTypeSerializer) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerMap.AddSerializer(Expression node, IBsonSerializer serializer) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.AddNodeSerializer(Expression node, IBsonSerializer serializer) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.VisitMember(MemberExpression node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.Visit(Expression node) at System.Linq.Expressions.ExpressionVisitor.VisitUnary(UnaryExpression node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.VisitUnary(UnaryExpression node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.Visit(Expression node) at System.Linq.Expressions.ExpressionVisitor.VisitBinary(BinaryExpression node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.VisitBinary(BinaryExpression node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.Visit(Expression node) at System.Linq.Expressions.ExpressionVisitor.VisitLambda[T](Expression`1 node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.VisitLambda[T](Expression`1 node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.Visit(Expression node) at System.Linq.Expressions.ExpressionVisitor.VisitUnary(UnaryExpression node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.VisitUnary(UnaryExpression node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.Visit(Expression node) at System.Dynamic.Utils.ExpressionVisitorUtils.VisitArguments(ExpressionVisitor visitor, IArgumentProvider nodes) at System.Linq.Expressions.ExpressionVisitor.VisitMethodCall(MethodCallExpression node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.VisitMethodCall(MethodCallExpression node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.Visit(Expression node) at System.Dynamic.Utils.ExpressionVisitorUtils.VisitArguments(ExpressionVisitor visitor, IArgumentProvider nodes) at System.Linq.Expressions.ExpressionVisitor.VisitMethodCall(MethodCallExpression node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.VisitMethodCall(MethodCallExpression node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.Visit(Expression node) at System.Dynamic.Utils.ExpressionVisitorUtils.VisitArguments(ExpressionVisitor visitor, IArgumentProvider nodes) at System.Linq.Expressions.ExpressionVisitor.VisitMethodCall(MethodCallExpression node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.VisitMethodCall(MethodCallExpression node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinderVisitor.Visit(Expression node) at MongoDB.Driver.Linq.Linq3Implementation.SerializerFinders.SerializerFinder.FindSerializers(Expression expression, ExpressionTranslationOptions translationOptions, SerializerMap nodeSerializers) at MongoDB.Driver.Linq.Linq3Implementation.Translators.TranslationContext.Create(Expression expression, Expression initialNode, IBsonSerializer initialSerializer, ExpressionTranslationOptions translationOptions, TranslationContextData data) at MongoDB.Driver.Linq.Linq3Implementation.Translators.TranslationContext.Create(Expression expression, IMongoQueryProviderInternal provider, ExpressionTranslationOptions translationOptions, TranslationContextData data) at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToExecutableQueryTranslators.ExpressionToExecutableQueryTranslator.TranslateScalar[TDocument,TResult](MongoQueryProvider`1 provider, Expression expression, ExpressionTranslationOptions translationOptions) at MongoDB.Driver.Linq.Linq3Implementation.MongoQueryProvider`1.Execute[TResult](Expression expression) at MongoDB.EntityFrameworkCore.Storage.MongoClientWrapper.ExecuteScalar[T](MongoExecutableQuery executableQuery) in /Users/arthur.vickers/code/mongo-efcore-provider/src/MongoDB.EntityFrameworkCore/Storage/MongoClientWrapper.cs:line 115 at MongoDB.EntityFrameworkCore.Storage.MongoClientWrapper.Execute[T](MongoExecutableQuery executableQuery, Action& log) in /Users/arthur.vickers/code/mongo-efcore-provider/src/MongoDB.EntityFrameworkCore/Storage/MongoClientWrapper.cs:line 91 at MongoDB.EntityFrameworkCore.Query.QueryingEnumerable`2.Enumerator.MoveNextHelper() in /Users/arthur.vickers/code/mongo-efcore-provider/src/MongoDB.EntityFrameworkCore/Query/QueryingEnumerable.cs:line 168 at MongoDB.EntityFrameworkCore.Query.QueryingEnumerable`2.Enumerator.MoveNext() in /Users/arthur.vickers/code/mongo-efcore-provider/src/MongoDB.EntityFrameworkCore/Query/QueryingEnumerable.cs:line 110 at System.Linq.Enumerable.TryGetSingle[TSource](IEnumerable`1 source, Boolean& found) at lambda_method33(Closure, QueryContext) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteCore[TResult](Expression query, Boolean async, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query) at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression) at MongoDB.EntityFrameworkCore.FunctionalTests.Mapping.ValueConverterTests.Nullable_enum_can_deserialize_and_query_from_nullable_int(Nullable`1 day, Boolean defaultConverter) in /Users/arthur.vickers/code/mongo-efcore-provider/tests/MongoDB.EntityFrameworkCore.FunctionalTests/Mapping/ValueConverterTests.cs:line 525 at InvokeStub_ValueConverterTests.Nullable_enum_can_deserialize_and_query_from_nullable_int(Object, Span`1) at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) System.TypeLoadException GenericArguments[1], 'System.DayOfWeek', on 'MongoDB.Bson.Serialization.Serializers.DowncastingSerializer`2[TBase,TDerived]' violates the constraint of type parameter 'TDerived'. at System.RuntimeTypeHandle.Instantiate(Type[] inst) at System.RuntimeType.MakeGenericType(Type[] typeArguments)
Repro:
await using var db1 = new DbStrings(); db1.Database.EnsureCreated(); db1.Add(new DaysIsString { days = "Monday" }); db1.SaveChanges(); await using var db2 = new DbInts(); var days = 2; _ = db2.Set<DaysIsNullableInt>().First(e => e.days == days); public class DbStrings : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseMongoDB("mongodb://localhost:56669/?directConnection=true", "Fruity7"); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<DaysIsString>(); } } public class DbInts : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseMongoDB("mongodb://localhost:56669/?directConnection=true", "Fruity7"); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<DaysIsNullableInt>().Property(e => e.days).HasConversion<string>(); } } class DaysIsNullableInt : IdIsObjectId { public int? days { get; set; } } public class DaysIsString : IdIsObjectId { public string days { get; set; } } public class IdIsObjectId { public ObjectId _id { get; set; } }
- is fixed by
-
CSHARP-5920 SerializerFinder wrapping serializer into Upcast/Downcast serializer breaks some expressions translation
-
- Closed
-