Question

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.

Was it helpful?

Solution

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

OTHER TIPS

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(); 
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top