ドメインオブジェクトのリストを返すNhibernate NullReferenceException
-
05-07-2019 - |
質問
以下は私が使用しているコードです。私にはとても簡単に思えます。しかし、最後の行、returnステートメントでNullReferenceExceptionを受け取ります。スタックトレースは次のとおりです。
FailedSystem.NullReferenceException: オブジェクト参照が設定されていません オブジェクトのインスタンス。で NHibernate.Criterion.Junction.ToSqlString(ICriteria 基準、ICriteriaQuery criteriaQuery、IDictionary
2 enabledFilters)で NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetWhereCondition(IDictionary
2 enabledFilters)で NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor(IOuterJoinLoadable 永続化、CriteriaQueryTranslator 翻訳者、ISessionFactoryImplementor factory、CriteriaImpl基準、文字列 rootEntityName、IDictionary2 enabledFilters)で NHibernate.Loader.Criteria.CriteriaLoader..ctor(IOuterJoinLoadable 永続化、ISessionFactoryImplementor factory、CriteriaImpl rootCriteria、 文字列rootEntityName、IDictionary
2 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>;
}
解決
手掛かりはスタックトレースにあります。
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)
すべての基準をコメントアウトし、問題を引き起こしている基準が見つかるまで、小さなグループで基準を再導入します。
ほとんどの場合、存在しない、またはマッピングされていないプロパティを参照している、またはそれをサポートしていない基準にnullを提供している。