Entity framework Left Outer Joins and Group into throws : ORA-00907: missing right parenthesis

巧了我就是萌 提交于 2019-12-14 01:42:18

问题


I am using Entity framework in a data access based on Entity Framework to target multiple database.

we are a team working with Entity Framework, for 2 years now, and the code produced works perfectly with sql server 2008. Now, we are testing the same code after migrating the database to Oracle 11 express r2g2, and all instructions that make left outer join or group into select throw exception showing this Call Stack :

System.Data.EntityCommandExecutionException was unhandled by user code
Message=An error occurred while executing the command definition. See the inner exception for details.
Source=System.Data.Entity
StackTrace:
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues)
at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Futura.BusinessLogic.Services.DemandeHospitalisationServices.DemandeHospitalisationService.GetMedecinList() in C:\Work\FuturaSmartDesign\Futura.BusinessLogic\Services\DemandeHospitalisationServices\DemandeHospitalisationService.cs:line 87
at GetMedecinList(DomainService , Object[] )
at System.ServiceModel.DomainServices.Server.ReflectionDomainServiceDescriptionProvider.ReflectionDomainOperationEntry.Invoke(DomainService domainService, Object[] parameters)
at System.ServiceModel.DomainServices.Server.DomainOperationEntry.Invoke(DomainService domainService, Object[] parameters, Int32& totalCount)
at System.ServiceModel.DomainServices.Server.DomainService.Query(QueryDescription queryDescription, IEnumerable`1& validationErrors, Int32& totalCount)
InnerException: Oracle.DataAccess.Client.OracleException
Message=ORA-00907: missing right parenthesis
Source=Oracle Data Provider for .NET
ErrorCode=-2147467259
DataSource=Calys
Number=907
Procedure=""
StackTrace:
at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck, Exception innerException)
at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck, Exception innerException)
at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
at Oracle.DataAccess.Client.OracleCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
InnerException:
Message=Oracle 11.2.0.2.0 ne prend pas en charge APPLY
InnerException:

Any help will be appreciated, thanks in advance.


回答1:


It was due to code produced by Entity Framework : CROSS/OUTER APPLY; that Oracle didn't support. that was reported here on Connect, https://connect.microsoft.com/VisualStudio/feedback/details/739458/linq-query-whene-used-with-oracle-11-g2-getting-ora-00907-missing-right-parenthesis

any workaround will be appreciated on MS Connect platform




回答2:


I had this error with EF 5 and Oracle 11g when my EF query had too many "Include". In my case 7 ".Include" causes this error.

        var myEntity = __DbContext.Get<MyEntity>()
            .Include("Property1")
            .Include("Property2")
            .Include("Property3")
            .Include("Property4")
            .Include("RelatedEntities.Property1")
            .Include("RelatedEntities.Property2")
            .Include("RelatedEntities.Property3")
            .First(c => c.Id == id);

I changed it to make two queries to fetch my data:

        var myEntity = __DbContext.Get<MyEntity>()
            .Include("Property1")
            .Include("Property2")
            .Include("Property3")
            .Include("Property4")
            .First(c => c.Id == id);

        myEntity.RelatedEntities = __DbContext.Get<RelatedEntity>()
            .Include("Property1")
            .Include("Property2")
            .Include("Property3")
            .Where(re => re.MyEntityId == myEntity.Id)
            .ToList(); 


来源:https://stackoverflow.com/questions/10266128/entity-framework-left-outer-joins-and-group-into-throws-ora-00907-missing-rig

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!