2011-08-23 238 views
2

我有LINQ NHibernate的3.1錯誤Linq查詢

var q = from Person p in SessionInstance.Query<Person>() 
        select p; 
return q.ToList(); 

查詢它這個錯誤: 「指定的方法不支持。」

是什麼問題呢?

堆棧跟蹤是:

at NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.GetClassName(IASTNode querySource) 
    at NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.Process(IASTNode tree) 
    at NHibernate.Hql.Ast.ANTLR.AstPolymorphicProcessor.Process() 
    at NHibernate.Hql.Ast.ANTLR.AstPolymorphicProcessor.Process(IASTNode ast, ISessionFactoryImplementor factory) 
    at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IASTNode ast, String queryIdentifier, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory) 
    at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(String queryIdentifier, IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory) 
    at NHibernate.Engine.Query.HQLExpressionQueryPlan.CreateTranslators(String expressionStr, IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory) 
    at NHibernate.Engine.Query.HQLExpressionQueryPlan..ctor(String expressionStr, IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory) 
    at NHibernate.Engine.Query.HQLExpressionQueryPlan..ctor(String expressionStr, IQueryExpression queryExpression, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory) 
    at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow, IDictionary`2 enabledFilters) 
    at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow) 
    at NHibernate.Impl.AbstractSessionImpl.CreateQuery(IQueryExpression queryExpression) 
    at NHibernate.Linq.NhQueryProvider.PrepareQuery(Expression expression, IQuery& query, NhLinqExpression& nhQuery) 
    at NHibernate.Linq.NhQueryProvider.Execute(Expression expression) 
    at NHibernate.Linq.NhQueryProvider.Execute[TResult](Expression expression) 
    at Remotion.Data.Linq.QueryableBase`1.GetEnumerator() 
    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
+0

你能提供一個更完整的堆棧跟蹤嗎? – Xhalent

+0

我忘記了。問題出在q.Tolist() – Ehsan

+0

當然這是一個運行時錯誤。 – Ehsan

回答

1

我要大膽地猜測,說.Query<Person>()是不支持的方法。

如果不是,那麼,據我所知,你不可能支持製作;您需要尋找替代方法來查詢/收集要查詢的數據。

+0

這是一個簡單的查詢。爲什麼不支持?如何糾正這個方法? – Ehsan

+0

這不是查詢本身的錯,但似乎是nhibernate方法。 –

+0

我忘記了。問題在q.Tolist() – Ehsan

1

我想你錯過使用補充:

using NHibernate.Linq; 

Query<T>是在NHibernate.Linq命名空間的擴展方法。

+0

不是。它存在。 – Ehsan

1

在NHibernate中,您可以使用SessionInstance.Linq。試過了嗎?

var q = from Person p in SessionInstance.Linq<Person>() 
     select p; 
+0

好的。我事先測試一下。在NH 3.1中是不正確的。在NH 3.1中,此方法更改爲查詢()而不是Linq () – Ehsan

+0

查詢是否正常工作? – naveen

+0

我不確定。 但是 我以前問過, 別人說的。 NH3.1中的Linq ()有1個編譯錯誤,但查詢()有1個運行時錯誤。 – Ehsan