Sounds like it's covered by one of the WCF-DS related issues fixed for
the upcoming 3.3.3 release (e.g. NH-3261, but others relate to this
also).

It would be useful if you could try a build from the 3.3.x branch to
see if the issue is resolved for you.

/Oskar


2013/1/5 Andrewz <[email protected]>:
> Any ideas or hints on this issue would be great,
>
> Thanks
>
>
> On Saturday, January 5, 2013 9:08:17 PM UTC+2, Andrewz wrote:
>>
>> I created a web app in Visual Studio 2010, added NHibernate and
>> FluentNHibernate by NuGet.
>> My intention is to test how oData works with latest NHibernate and SQL
>> Server 2008 R2
>> It's a simple app with one table, User.
>> I added like 5,000 users in the User table to have data to query.
>>
>> I am doing the following queries which worked OK:
>>
>> http://localhost:4380/UserService.svc/Users()?$top=10&$inlinecount=allpages
>>
>> http://localhost:4380/UserService.svc/Users()?$filter=FirstName%20eq%20'Andrew0'&$top=10&$inlinecount=allpages
>>
>> My question is why the following query fails:
>>
>> http://localhost:4380/UserService.svc/Users()?$filter=substringof('Andrew',tolower(FirstName))&$orderby=LastName&$top=10&$inlinecount=allpages
>>
>> The exception is the following(see below the stack trace):
>> Unable to cast object of type 'NHibernate.Hql.Ast.HqlCast' to type
>> 'NHibernate.Hql.Ast.HqlBooleanExpression'.
>>
>> Here are my classes:
>>
>> [DataServiceKey("Id")]
>> [DataServiceEntity]
>> public class User
>> {
>>         public virtual int Id { get; protected set; }
>>         public virtual string FirstName { get; set; }
>>         public virtual string LastName { get; set; }
>> }
>>
>>     public class UserMapping : ClassMap<User>
>>     {
>>         public UserMapping()
>>         {
>>             Id(user => user.Id).GeneratedBy.Identity();
>>             Map(user => user.FirstName).Not.Nullable().Length(50);
>>             Map(user => user.LastName).Not.Nullable().Length(50);
>>         }
>>   }
>>
>>  public class UserDataContext
>>     {
>>         public ISession Session { set; get; }
>>
>>         public IQueryable<User> Users
>>         {
>>             get
>>             {
>>                 return this.Session.Query<User>();
>>             }
>>         }
>>     }
>>
>>  [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
>>     public class UserService : DataService<UserDataContext>, IDisposable
>>     {
>>         ISession session;
>>
>>         public static void InitializeService(DataServiceConfiguration
>> config)
>>         {
>>             config.SetEntitySetAccessRule("*", EntitySetRights.All);
>>             config.DataServiceBehavior.MaxProtocolVersion =
>> DataServiceProtocolVersion.V2;
>>             config.UseVerboseErrors = true;
>>         }
>>
>>         protected override UserDataContext CreateDataSource()
>>         {
>>             var sessionFactory = new HibernateSessionFactory();
>>             this.session = sessionFactory.OpenSession();
>>             return new UserDataContext()
>>             {
>>                 Session = this.session
>>             };
>>         }
>>
>>         public void Dispose()
>>         {
>>             this.session.Dispose();
>>             this.session = null;
>>         }
>>     }
>>
>>
>> Here is the web response I see in Fiddler:
>>
>> <?xml version="1.0" encoding="utf-8" standalone="yes"?>
>> <error
>> xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";>
>>   <code></code>
>>   <message xml:lang="en-US">An error occurred while processing this
>> request.</message>
>>   <innererror>
>>     <message>Exception has been thrown by the target of an
>> invocation.</message>
>>     <type>System.Reflection.TargetInvocationException</type>
>>     <stacktrace>   at
>> System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method,
>> Object target, Object[] arguments, SignatureStruct&amp; sig,
>> MethodAttributes methodAttributes, RuntimeType typeOwner)&#xD;
>>    at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo
>> method, Object target, Object[] arguments, Signature sig, MethodAttributes
>> methodAttributes, RuntimeType typeOwner)&#xD;
>>    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags
>> invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean
>> skipVisibilityChecks)&#xD;
>>    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags
>> invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)&#xD;
>>    at System.Reflection.MethodBase.Invoke(Object obj, Object[]
>> parameters)&#xD;
>>    at System.Data.Services.RequestQueryProcessor.ProcessCount()&#xD;
>>    at System.Data.Services.RequestQueryProcessor.ProcessQuery()&#xD;
>>    at System.Data.Services.RequestQueryProcessor.ProcessQuery(IDataService
>> service, RequestDescription description)&#xD;
>>    at System.Data.Services.RequestUriProcessor.ProcessRequestUri(Uri
>> absoluteRequestUri, IDataService service)&#xD;
>>    at System.Data.Services.DataService`1.ProcessIncomingRequestUri()&#xD;
>>    at System.Data.Services.DataService`1.HandleRequest()</stacktrace>
>>     <internalexception>
>>       <message>Unable to cast object of type 'NHibernate.Hql.Ast.HqlCast'
>> to type 'NHibernate.Hql.Ast.HqlBooleanExpression'.</message>
>>       <type>System.InvalidCastException</type>
>>       <stacktrace>   at
>> NHibernate.Hql.Ast.HqlTreeNodeExtensions.AsBooleanExpression(HqlTreeNode
>> node)&#xD;
>>    at
>> NHibernate.Linq.Visitors.QueryModelVisitor.VisitWhereClause(WhereClause
>> whereClause, QueryModel queryModel, Int32 index)&#xD;
>>    at Remotion.Linq.Clauses.WhereClause.Accept(IQueryModelVisitor visitor,
>> QueryModel queryModel, Int32 index)&#xD;
>>    at
>> Remotion.Linq.QueryModelVisitorBase.VisitBodyClauses(ObservableCollection`1
>> bodyClauses, QueryModel queryModel)&#xD;
>>    at Remotion.Linq.QueryModelVisitorBase.VisitQueryModel(QueryModel
>> queryModel)&#xD;
>>    at
>> NHibernate.Linq.Visitors.QueryModelVisitor.GenerateHqlQuery(QueryModel
>> queryModel, VisitorParameters parameters, Boolean root)&#xD;
>>    at
>> NHibernate.Linq.NhLinqExpression.Translate(ISessionFactoryImplementor
>> sessionFactory)&#xD;
>>    at
>> NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(String
>> queryIdentifier, IQueryExpression queryExpression, String collectionRole,
>> Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor
>> factory)&#xD;
>>    at
>> NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression
>> queryExpression, Boolean shallow, IDictionary`2 enabledFilters)&#xD;
>>    at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression
>> queryExpression, Boolean shallow)&#xD;
>>    at NHibernate.Impl.AbstractSessionImpl.CreateQuery(IQueryExpression
>> queryExpression)&#xD;
>>    at NHibernate.Linq.DefaultQueryProvider.PrepareQuery(Expression
>> expression, IQuery&amp; query, NhLinqExpression&amp; nhQuery)&#xD;
>>    at NHibernate.Linq.DefaultQueryProvider.Execute(Expression
>> expression)&#xD;
>>    at NHibernate.Linq.DefaultQueryProvider.Execute[TResult](Expression
>> expression)&#xD;
>>    at System.Linq.Queryable.LongCount[TSource](IQueryable`1 source)&#xD;
>>    at
>> System.Data.Services.RequestQueryProcessor.CountQueryResult[TElement](IQueryable`1
>> query)</stacktrace>
>>     </internalexception>
>>   </innererror>
>> </error>
>
> --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/nhusers/-/_B79zDbcu1MJ.
>
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to