質問

以下は私が使用しているコードです。私にはとても簡単に思えます。しかし、最後の行、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、IDictionary 2   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を提供している。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top