Skip to content

Error 42P08: could not determine data type of parameter when using subqueries and string variable parameter #121

@dlevis85

Description

@dlevis85

Steps to reproduce

I am executing a LINQ to Entities query with Npgsql 4.0.6, EntityFramework 6.2.0 and EntityFramework6.Npgsql 3.2.0.0

This query has a master type (in_flag) and a subquery for getting the inner collection type (Settings).
in_flag entity is 1 to N relation with in_flag_setting entity in the database.

   var curFlagPreQuery =
                    (
                     from mFlag in db.Context.in_flag
                     join mFlagType in db.Context.in_flag_type
                     on mFlag.type equals mFlagType.id
                     where
                      (mFlag.id == flagInfoItem.FlagId)
                     select new
                     {
                         Settings = (from mFlagSetting in mFlag.in_flag_setting
                                     from mFlagSettingGrant in mFlagSetting.in_flag_settings_grants
                                     where mFlagSettingGrant.role == usr.RoleStr && mFlagSettingGrant.visible
                                     orderby mFlagSetting.creation_date ascending
                                     select new FlagSetting
                                     {
                                         Id = mFlagSetting.id,
                                         FlagId = mFlagSetting.flag,
                                         Name = mFlagSetting.name,
                                         Code = mFlagSetting.code,
                                         EnglishName = mFlagSetting.name,
                                         CreationDate = mFlagSetting.creation_date,
                                         CreationUser = mFlagSetting.creation_user,
                                         LastUpdateUser = mFlagSetting.last_upd_user,
                                         UpdateDate = mFlagSetting.last_upd_date,
                                         Value = mFlagSetting.value
                                     })
                     }).Single();

The issue

The execution of query throws an exception

Exception message:

| An error occurred while executing the command definition. See the inner exception for details.

InnerException | PostgresException 42P08: could not determine data type of parameter $1

Stack trace:

in System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)   in System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues)   in System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClassb.<GetResults>b__a()   in System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)   in System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClassb.<GetResults>b__9()   in System.Data.Entity.Infrastructure.DefaultExecutionStrategy.Execute[TResult](Func`1 operation)   in System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)   in System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()   in System.Lazy`1.CreateValue()   in System.Lazy`1.LazyInitValue()   in System.Lazy`1.get_Value()   in System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()   in System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)   in System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__2[TResult](IEnumerable`1 sequence)   in System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)   in System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[TResult](Expression expression)   in System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression expression)   in System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source)   in UserQuery.Main() in c:\Users\dlevis\AppData\Local\Temp\LINQPad\_dlxghkka\query_yifnan.cs:riga 40   in LINQPad.ExecutionModel.ClrQueryRunner.Run()   in LINQPad.ExecutionModel.Server.RunQuery(QueryRunner runner)
--




### Further technical details

Npgsql version: 4.0.6
PostgreSQL version: 9.4
Operating system: Windows 10

It seems to be related to the parameter **usr.RoleStr** in the subquery. If I use a string constant, it works.
If I split the query in two subsequent queries, it works.
With old version of Npgsql 2.2.7, the same query works.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions