Nhibernate NullReferenceException retournant la liste des objets de domaine
-
05-07-2019 - |
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, IDictionary2 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>;
}
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.