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/-/YaKoMpJ6ctAJ.
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