Domanda

Di seguito è riportato il codice che sto usando. Mi sembra abbastanza semplice. Ma ottengo una NullReferenceException nell'ultima riga, l'istruzione return. Ecco la traccia dello stack:

  

FailedSystem.NullReferenceException:   Riferimento oggetto non impostato su un   istanza di un oggetto. a   NHibernate.Criterion.Junction.ToSqlString (ICriteria   criteri, ICriteriaQuery   criteriQuery, IDictionary 2   enabledFilters) a   NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetWhereCondition (IDictionary 2   enabledFilters) a   NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor (IOuterJoinLoadable   persister, CriteriaQueryTranslator   traduttore, ISessionFactoryImplementor   factory, CriteriImpl criteri, String   rootEntityName, IDictionary 2   enabledFilters) a   NHibernate.Loader.Criteria.CriteriaLoader..ctor (IOuterJoinLoadable   persister, ISessionFactoryImplementor   factory, CriteriImpl rootCriteria,   Stringa rootEntityName, IDictionary 2   enabledFilters) a   NHibernate.Impl.SessionImpl.List (CriteriaImpl   criteri, risultati IList) a   NHibernate.Impl.CriteriaImpl.List (IList   risultati) a   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>;

        }
È stato utile?

Soluzione

L'indizio è nella traccia dello stack.

È solo nella dichiarazione di ritorno che i criteri vengono valutati per produrre un'istruzione 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) 

Commenta tutti i tuoi criteri e reintroducili in piccoli gruppi fino a trovare quello che causa il problema.

Molto probabilmente stai facendo riferimento a una proprietà che non esiste o non è mappata o stai fornendo un valore null a un criterio che non la supporta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top