Closed
Description
I've just updated from NHibernate 5.2.7 to 5.3.2 and now one of my queries is failing.
I've simplified the failing query to this:
Customer customerParameter = ...
var customersSubquery = Query<SomeEntity>()
.Select(x => x.Customer)
.Where(x => x != customerParameter);
var result = Query<SomeOtherEntity>()
.Where(x => customersSubquery.Contains(x.Customer))
.ToArray();
This is the exception I get:
System.InvalidCastException: Unable to cast object of type 'NHibernate.Persister.Entity.SingleTableEntityPersister' to type 'NHibernate.Persister.Collection.IQueryableCollection'.
Full stack:
NHibernate.dll!NHibernate.Linq.Visitors.ParameterTypeLocator.SetParameterTypes(System.Collections.Generic.IDictionary<System.Linq.Expressions.ConstantExpression, NHibernate.Param.NamedParameter> parameters, Remotion.Linq.QueryModel queryModel, System.Type targetType, NHibernate.Engine.ISessionFactoryImplementor sessionFactory, bool removeMappedAsCalls) Line 116
NHibernate.dll!NHibernate.Linq.NhLinqExpression.Translate(NHibernate.Engine.ISessionFactoryImplementor sessionFactory, bool filter) Line 94
NHibernate.dll!NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(NHibernate.IQueryExpression queryExpression, string collectionRole, bool shallow, System.Collections.Generic.IDictionary<string, NHibernate.IFilter> filters, NHibernate.Engine.ISessionFactoryImplementor factory) Line 20
NHibernate.dll!NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(NHibernate.IQueryExpression queryExpression, bool shallow, System.Collections.Generic.IDictionary<string, NHibernate.IFilter> enabledFilters) Line 63
NHibernate.dll!NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(NHibernate.IQueryExpression queryExpression, bool shallow) Line 584
NHibernate.dll!NHibernate.Impl.AbstractSessionImpl.CreateQuery(NHibernate.IQueryExpression queryExpression) Line 552
NHibernate.dll!NHibernate.Linq.DefaultQueryProvider.PrepareQuery(System.Linq.Expressions.Expression expression, out NHibernate.IQuery query) Line 208
NHibernate.dll!NHibernate.Linq.DefaultQueryProvider.ExecuteList<MyEntityType>(System.Linq.Expressions.Expression expression) Line 107
NHibernate.dll!NHibernate.Linq.NhQueryable<MyEntityType>.System.Collections.Generic.IEnumerable<MyEntityType>.GetEnumerator() Line 65
System.Core.dll!System.Linq.Buffer<MyEntityType>.Buffer(System.Collections.Generic.IEnumerable<MyEntityType> source)
System.Core.dll!System.Linq.Enumerable.ToArray<MyEntityType>(System.Collections.Generic.IEnumerable<MyEntityType> source)