为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:--03134284172-20240527-229704-20093 Pack5
【操作系统】:Docker
【CPU】: 虚拟化机器
【问题描述】*:
从mysql 迁移到 dm 之后
使用efcore驱动进行查询数据 报错:
Dm.DmException (0x80004005): 第3 行附近出现错误:\n无法解析的成员访问表达式[\"SYSDBA\".JSON_OVERLAPS]\r\n at Dm.DmCommand.do_ExecuteDbDataReader(CommandBehavior behavior)\r\n at Dm.DmCommand.ExecuteDbDataReader(CommandBehavior behavior)\r\n at System.Data.Common.DbCommand.ExecuteDbDataReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken)\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)\r\n at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)\r\n at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)\r\n at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.AsyncEnumerator.InitializeReaderAsync(DbContext _, Boolean result, CancellationToken cancellationToken)\r\n at Microsoft.EntityFrameworkCore.Dm.Storage.Internal.DmExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func`4 operation, Func`4 verifySucceeded, CancellationToken cancellationToken)\r\n at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.AsyncEnumerator.MoveNextAsync()\r\n at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleAsync[TSource](IAsyncEnumerable`1 asyncEnumerable, CancellationToken cancellationToken)\r\n at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleAsync[TSource](IAsyncEnumerable`1 asyncEnumerable, CancellationToken cancellationToken)\r\n at Byzan.Spas.Metadata.Biz.Services.ProjectService.QueryAsync(ProjectQueryBo query, CancellationToken cancellationToken) in D:\\cx\\Byzan\\spas\\Metadata\\byzan.spas.metadata.backend\\src\\Byzan.Spas.Metadata.Biz\\Services\\ProjectService.cs:line 138\r\n at Byzan.Spas.Metadata.App.Controllers.ProjectController.Get(ProjectQueryDto request, CancellationToken cancellationToken) in D:\\cx\\Byzan\\spas\\Metadata\\byzan.spas.metadata.backend\\src\\Byzan.Spas.Metadata.App\\Controllers\\ProjectController.cs:line 61\r\n at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)\r\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)\r\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\r\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)\r\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)\r\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
使用的sdk
<PackageReference Include="DM.Microsoft.EntityFrameworkCore" Version="3.1.0.20604" />
请问这个不是全局函数嘛?为什么报错 SYSDBA 模式下的? SYSDBA 是初始化的账号。
再次尝试
尝试过修改配置:
ORDER_BY_NULLS_FLAG = 2
COMPATIBLE_MODE = 4
JSON_MODE = 2
2、实例级别配置:
CASE_SENSITIVE 设置为 0 ,大小写不敏感
3、新建一个专属用户 DEV_SPAS_METADATA
4、 最后重新迁移数据,并查询
还是查询报错:
Dm.DmException (0x80004005): 第3 行附近出现错误:\n无法解析的成员访问表达式["SYSDBA".JSON_EXTRACT]\r\n
已经不是 SYSDBA 用户 或者是 SYSDBA模式了,为什么还是提示这个异常?
第三次
尝试开了一个.net core 7 的 ef demo项目,并引入:
<PackageReference Include="DM.Microsoft.EntityFrameworkCore" Version="7.0.0.20986" />
还是一样的报错。
感觉报错像是这样一个语句:
我用的: **DbFunctionAttribute(efcore)**的方式。
是不是真的sdk存在问题。
原生sql尝试
原生sql的方式,反而执行成功了。表名函数可用
大致猜测
还是sdk存在问题,在组合表达式的时候,把schema加上了,导致以为是自定义的函数。
获取有其他我不知道的参数可以控制?请指教
查询的SQL是什么样子的,在管理工具可以执行吗?查询SQL里面有这一段吗?
可以参考以下指引排查一下
https://eco.dameng.com/document/dm/zh-cn/faq/faq-errorcode.html#[-2207]:%E6%97%A0%E6%B3%95%E8%A7%A3%E6%9E%90%E7%9A%84%E6%88%90%E5%91%98%E8%A1%A8%E8%BE%BE%E5%BC%8F
其他的都不行:
Dm.DmException (0x80004005): 第3 行附近出现错误:\n无法解析的成员访问表达式["SYSDBA".JSON_EXTRACT]\r\n
DbFunctionAttribute 是不支持吗?