2009-09-11 74 views
1

以下是我正在使用的代碼。對我來說似乎很簡單。但是我在最後一行得到了一個N​​ullReferenceException,即return語句。這裏是堆棧跟蹤:Nhibernate NullReferenceException返回域對象列表

FailedSystem.NullReferenceException: 對象引用不設置爲一個對象的一個​​ 實例。在 NHibernate.Criterion.Junction.ToSqlString(的ICriteria 標準,ICriteriaQuery CriteriaQuery中,IDictionary的 enabledFilters)在 NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor(IOuterJoinLoadable 持留,CriteriaQueryTranslator 翻譯,ISessionFactoryImplementor 工廠,CriteriaImpl標準,字符串 rootEntityName,IDictionary的2 enabledFilters) at NHibernate.Loader.Criteria.CriteriaLoader..ctor(IOuterJoinLoadable persister, ISessionFactoryImplementor factory, CriteriaImpl rootCriteria, String rootEntityName, IDictionary 2個 enabledFilters)在 NHibernate.Impl.SessionImpl.List(CriteriaImpl 標準,IList的結果)在 NHibernate.Impl.CriteriaImpl.List(在的IList 結果)NHibernate.Impl.CriteriaImpl.List()

public List<Person> Search(string keyword) 
     { 
      ICriteria criteria = session.CreateCriteria(typeof (Person)); 
      Disjunction disjunction = Restrictions.Disjunction(); 
      { 
      // In here, there is a whole lot of business logic adding around 20 conditions  to the disjunction 

      } 

      criteria.Add(disjunction); 
      return criteria.List<Person>() as List<Person>; 

     } 

回答

1

線索是在你的堆棧跟蹤。

只有在您的返回語句中,評估標準才能生成SQL語句。

FailedSystem.NullReferenceException: 
Object reference not set to an instance of an object. 
at NHibernate.Criterion.Junction.ToSqlString(
    ICriteria criteria, ICriteriaQuery criteriaQuery, IDictionary2 enabledFilters) 
at NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetWhereCondition(
    IDictionary2 enabledFilters) 

評論你所有的標準,並重新引入他們三五成羣,直到找到造成問題的人。

您很可能引用了一個不存在或未映射的屬性,或者向不支持該屬性的條件提供null。