当在Linq中使用enum数组以及contains查询时,会报Cannot support multirange type mapping for range type
我在我的fork上推送了一个提交,来重现此问题。 概略如下:在测试项目中的Blog中添加新的enum属性
[Table("blogs")]
public class Blog
{
[Key]
[Column("id")]
public int Id { get; set; }
[Column("name")]
public string Name { get; set; }
public BlogType BlogType { get; set; }
}
public enum BlogType
{
Personal,
Company
}
public class BlogFilter
{
public BlogType[] Type { get; init; }
}
当做如下查询时,会报如题的例外
// get
var filter = new BlogFilter() { Type = new[] { BlogType.Company } };
var testselect = context.Blogs.FirstOrDefault(q=>filter.Type.Contains(q.BlogType));
System.InvalidOperationException HResult=0x80131509 Message=Cannot support multirange type mapping for range type Source=DotNetCore.EntityFrameworkCore.KingbaseES StackTrace: 在 Kdbndp.EntityFrameworkCore.KingbaseES.Storage.Internal.KdbndpTypeMappingSource.FindCollectionMapping(RelationalTypeMappingInfo info, Type modelType, Type providerType, CoreTypeMapping elementMapping) 在 D:\Projects\EntityFrameworkCore.KingbaseES\src\EFCore.KingbaseES\Storage\Internal\KdbndpTypeMappingSource.cs 中: 第 527 行 在 Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.<>c.<FindMappingWithConversion>b__8_0(ValueTuple
4 k, RelationalTypeMappingSource self) 在 /_/src/EFCore.Relational/Storage/RelationalTypeMappingSource.cs 中: 第 199 行 在 System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd[TArg](TKey key, Func3 valueFactory, TArg factoryArgument) 在 Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.FindMappingWithConversion(RelationalTypeMappingInfo mappingInfo, Type providerClrType, ValueConverter customConverter) 在 /_/src/EFCore.Relational/Storage/RelationalTypeMappingSource.cs 中: 第 140 行 在 Microsoft.EntityFrameworkCore.Storage.RelationalTypeMappingSource.FindMapping(Type type, IModel model, CoreTypeMapping elementMapping) 在 /_/src/EFCore.Relational/Storage/RelationalTypeMappingSource.cs 中: 第 385 行 在 Kdbndp.EntityFrameworkCore.KingbaseES.Query.KdbndpSqlExpressionFactory.ApplyTypeMappingsOnItemAndArray(SqlExpression itemExpression, SqlExpression arrayExpression) 在 D:\Projects\EntityFrameworkCore.KingbaseES\src\EFCore.KingbaseES\Query\KdbndpSqlExpressionFactory.cs 中: 第 625 行 在 Kdbndp.EntityFrameworkCore.KingbaseES.Query.Internal.KdbndpQueryableMethodTranslatingExpressionVisitor.TranslateContains(ShapedQueryExpression source, Expression item) 在 D:\Projects\EntityFrameworkCore.KingbaseES\src\EFCore.KingbaseES\Query\Internal\KdbndpQueryableMethodTranslatingExpressionVisitor.cs 中: 第 601 行 在 Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) 在 /_/src/EFCore/Query/QueryableMethodTranslatingExpressionVisitor.cs 中: 第 187 行 在 Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) 在 /_/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs 中: 第 263 行 在 Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.Translate(Expression expression) 在 /_/src/EFCore/Query/QueryableMethodTranslatingExpressionVisitor.cs 中: 第 62 行 在 Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.Translate(Expression expression) 在 /_/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs 中: 第 78 行 在 Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.TranslateSubquery(Expression expression) 在 /_/src/EFCore/Query/QueryableMethodTranslatingExpressionVisitor.cs 中: 第 549 行 在 Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) 在 /_/src/EFCore.Relational/Query/RelationalSqlTranslatingExpressionVisitor.cs 中: 第 1007 行 在 Kdbndp.EntityFrameworkCore.KingbaseES.Query.Internal.KdbndpSqlTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) 在 D:\Projects\EntityFrameworkCore.KingbaseES\src\EFCore.KingbaseES\Query\Internal\KdbndpSqlTranslatingExpressionVisitor.cs 中: 第 262 行 在 Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.TranslateInternal(Expression expression, Boolean applyDefaultTypeMapping) 在 /_/src/EFCore.Relational/Query/RelationalSqlTranslatingExpressionVisitor.cs 中: 第 152 行 在 Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.Translate(Expression expression, Boolean applyDefaultTypeMapping) 在 /_/src/EFCore.Relational/Query/RelationalSqlTranslatingExpressionVisitor.cs 中: 第 120 行 在 Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.TranslateExpression(Expression expression, Boolean applyDefaultTypeMapping) 在 /_/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs 中: 第 1826 行 在 Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.TranslateLambdaExpression(ShapedQueryExpression shapedQueryExpression, LambdaExpression lambdaExpression) 在 /_/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs 中: 第 1848 行 在 Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.TranslateWhere(ShapedQueryExpression source, LambdaExpression predicate) 在 /_/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs 中: 第 1279 行 在 Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) 在 /_/src/EFCore/Query/QueryableMethodTranslatingExpressionVisitor.cs 中: 第 496 行 在 Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) 在 /_/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs 中: 第 263 行 在 Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) 在 /_/src/EFCore/Query/QueryableMethodTranslatingExpressionVisitor.cs 中: 第 132 行 在 Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.VisitMethodCall(MethodCallExpression methodCallExpression) 在 /_/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs 中: 第 263 行 在 Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor.Translate(Expression expression) 在 /_/src/EFCore/Query/QueryableMethodTranslatingExpressionVisitor.cs 中: 第 62 行 在 Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.Translate(Expression expression) 在 /_/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs 中: 第 78 行 在 Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](Expression query) 在 /_/src/EFCore/Query/QueryCompilationContext.cs 中: 第 164 行 在 Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](Expression query, Boolean async) 在 /_/src/EFCore/Storage/Database.cs 中: 第 66 行 在 Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](IDatabase database, Expression query, IModel model, Boolean async) 在 /_/src/EFCore/Query/Internal/QueryCompiler.cs 中: 第 82 行 在 Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass9_01.<Execute>b__0() 在 //src/EFCore/Query/Internal/QueryCompiler.cs 中: 第 66 行 在 Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func`1 compiler) 在 //src/EFCore/Query/Internal/CompiledQueryCache.cs 中: 第 66 行 在 Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query) 在 //src/EFCore/Query/Internal/QueryCompiler.cs 中: 第 62 行 在 Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression) 在 //src/EFCore/Query/Internal/EntityQueryProvider.cs 中: 第 64 行 在 KingbaseES.BasicTest.Program.Main(String[] args) 在 D:\Projects\EntityFrameworkCore.KingbaseES\test\KingbaseES.BasicTest\Program.cs 中: 第 46 行
@wangpengxpy @alexinea @JaneConan 你们可以用我提交的测试案例复现这个问题吗? 如果要修正,应该从哪个方向着手?
可提供数据库环境吗,本地没环境,没法测试验证
用PG 9.0版本初步测试验证了下,依然会抛其他异常,官方的程序集(Kdbndp.dll)底层数据类型不支持,所以这个问题没法解决
你好,这个问题经确认是官方的程序集(Kdbndp.dll)不支持哈,集成官方最新版本的dll这个问题就不存在了,所以暂不打算处理这个问题了,接下来会在.NET 9.0上适配最新dll解决这个问题