2009-09-11 7 views
1

Voici le code que j'utilise. Semble assez simple pour moi. Mais j'obtiens une exception NullReferenceException à la dernière ligne, l'instruction return. Voici la trace de la pile:Nhibernate NullReferenceException retournant Liste des objets de domaine

FailedSystem.NullReferenceException: référence d'objet non définie à une instance d'un objet. à NHibernate.Criterion.Junction.ToSqlString (ICriteria critères, ICriteriaQuery criteriaQuery, IDictionary enabledFilters) à NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor (IOuterJoinLoadable persister, CriteriaQueryTranslator traducteur, usine ISessionFactoryImplementor , CriteriaImpl critères, cordes rootEntityName, IDictionary enabledFilters) à NHibernate.Impl.SessionImpl.List (CriteriaImpl critères, les résultats IList) à NHibernate.Impl.CriteriaImpl.List (IList résultats) à 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>; 

     } 

Répondre

1

L'indice est dans votre trace de la pile.

C'est seulement à votre déclaration de retour que le critère est évalué pour produire une instruction 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) 

Commentez tous vos critères et réintroduisez-les en petits groupes jusqu'à ce que vous trouviez celui qui cause le problème.

Très probablement, vous faites référence à une propriété qui n'existe pas, ou n'est pas mappée, ou qui fournit une valeur nulle à un critère qui ne la prend pas en charge.

Questions connexes