以下是我正在使用的代码。对我来说似乎很简单。但是我在最后一行得到一个NullReferenceException,即return语句。这是堆栈跟踪:

  

FailedSystem.NullReferenceException:   对象引用未设置为   对象的实例。在   NHibernate.Criterion.Junction.ToSqlString(的ICriteria   标准,ICriteriaQuery   criteriaQuery,IDictionary 2   enabledFilters)at   NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetWhereCondition(IDictionary的 2   enabledFilters)at   NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor(IOuterJoinLoadable   persister,CriteriaQueryTranslator   翻译,ISessionFactoryImplementor   factory,CriteriaImpl criteria,String   rootEntityName,IDictionary 2   enabledFilters)at   NHibernate.Loader.Criteria.CriteriaLoader..ctor(IOuterJoinLoadable   persister,ISessionFactoryImplementor   工厂,CriteriaImpl rootCriteria,   String rootEntityName,IDictionary 2   enabledFilters)at   NHibernate.Impl.SessionImpl.List(CriteriaImpl   标准,IList结果)at   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