Question

Voici le code que j'utilise. Semble assez simple pour moi. Mais je reçois une exception NullReferenceException à la dernière ligne, l'instruction return. Voici la trace de la pile:

  

FailedSystem.NullReferenceException:   Référence d'objet non définie sur un   instance d'un objet. à   NHibernate.Criterion.Junction.ToSqlString (ICriteria   critères, ICriteriaQuery   critèresQuery, IDictionary 2   enabledFilters) à   NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetWhereCondition (IDictionary 2   enabledFilters) à   NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor (IOuterJoinLoadable   persister, CriteriaQueryTranslator   traducteur, ISessionFactoryImplementor   usine, critères CriteriaImpl, String   rootEntityName, IDictionary 2   enabledFilters) à   NHibernate.Loader.Criteria.CriteriaLoader..ctor (IOuterJoinLoadable   persister, ISessionFactoryImplementor   usine, CriteriaImpl rootCriteria,   String rootEntityName, IDictionary 2   enabledFilters) à   NHibernate.Impl.SessionImpl.List (CriteriaImpl   critères, 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>;

        }
Était-ce utile?

La solution

L'indice est dans votre trace de pile.

Ce n'est qu'à 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 dans de petits groupes jusqu'à ce que vous trouviez celui qui pose problème.

Il est fort probable que vous référencez une propriété qui n'existe pas ou qui n'est pas mappée, ou que vous fournissez une valeur null à un critère qui ne le prend pas en charge.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top