有时,使用实体框架查询Oracle DB时会出现错误"ORA-00933"但是当我重新启动webapp时,它会起作用

Tie*_*nCB 10 oracle entity-framework

我已经将Entity Framework 5用于基于Web的应用程序的Oralce数据库.有时(很少发生),出现错误"ORA-00933",但是当我重新启动webapp时,它会再次运行.这是日志:

System.Data.EntityCommandExecutionException:执行命令定义时发生错误.有关详细信息,请参阅内部异常 ---> Oracle.ManagedDataAccess.Client.OracleException:ORA-00933:在OracleInternal的OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl,Int32&cursorId,Boolean bThrowArrayBindRelatedErrors,OracleException&exceptionForArrayBindDML,Boolean&hasMoreRowsInDB,Boolean bFirstIterationDone)中未正确结束SQL命令.ServiceObjects.OracleCommandImpl.ExecuteReader(字符串的CommandText,OracleParameterCollection paramColl,的CommandType命令类型,OracleConnectionImpl connectionImpl,OracleDataReaderImpl&rdrImpl,的Int32 longFetchSize,Int64的clientInitialLOBFS,OracleDependencyImpl orclDependencyImpl,Int64的[] scnForExecution,Int64的[]&scnFromExecution,OracleParameterCollection&bindByPositionParamColl,布尔逻辑bBindParamPresent,Int64的&internalInitialLOBFS ,OracleException&exceptionForArrayBindDML,Boolean isDescribeOnly,Boolean isFromEF)at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteReader(Boolean requery,Boolean fillReques)在System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior行为)的Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteDbDataReader(CommandBehavior行为)中的t,CommandBehavior行为---内部异常堆栈跟踪结束---在系统System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute中的.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior behavior 1.GetResults(Nullable)在系统上的System.Data.Objects.ObjectQuery 1 forMergeOption的[TResultType](ObjectContext context,ObjectParameterCollection parameterValues)来自 MOS.DAO.HisTreatment.HisTreatmentGet.GetById(Int64 id,HisTreatmentSO搜索)的1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerableSystem.Linq.Queryable.SingleOrDefault [TSource](IQueryable`1 source)的.Data.Objects.ObjectQuery 1 source
)

这是代码"HisTreatmentGet.GetById":

HIS_TREATMENT result = null;
try
{
    bool valid = true;
    using (var ctx = new AppContext())
    {
        var query = ctx.HIS_TREATMENT.AsQueryable().Where(p => p.ID == id);
        ...
        result = query.SingleOrDefault();
    }
}
catch (Exception ex)
{
    ....
}
return result;
Run Code Online (Sandbox Code Playgroud)

我试过谷歌搜索,但没有解决方案.有人可以给我建议吗?

Gui*_*ume 5

Oracle 的实体框架提供程序中存在错误。

似乎 Oracle.ManagedDataAccess.EntityFramework.SqlGen.SqlSelectStatement.Top_s 是并行查询借用的罪魁祸首。这应该是线程静态(快速破解)或移动到某些上下文状态(正确修复,例如到 SqlGenerator)。

https://community.oracle.com/thread/3728543

Oracle 支持部门没有答复。话虽如此,nuget 包有一个新版本:12.2.110。您可以尝试一下并检查问题是否已解决。