2009-09-11 2 views
1

Ниже приведен код, который я использую. Для меня это довольно просто. Но я получаю исключение NullReferenceException в последней строке, оператор return. Вот трассировки стека:Nhibernate NullReferenceException return Список объектов домена

FailedSystem.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. в NHibernate.Criterion.Junction.ToSqlString (ICriteria критериев, ICriteriaQuery criteriaQuery, IDictionary enabledFilters) в NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor (IOuterJoinLoadable стойкой бактерии, CriteriaQueryTranslator переводчика, ISessionFactoryImplementor фабрики, CriteriaImpl критерии, String rootEntityName, IDictionary 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

Ключ находится в вашем трассировки стека.

Это только в вашем заявлении return, что критерии оцениваются для создания инструкции 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) 

Закомментируйте все ваши критерии и вновь ввести их в небольших группах, пока не найдете тот, который вызывает проблему.

Скорее всего, вы ссылаетесь на свойство, которое не существует или не отображается, или предоставляющее нуль критерию, который его не поддерживает.