以下是我正在使用的代码。对我来说似乎很简单。但是我在最后一行得到一个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,IDictionary2 enabledFilters) at NHibernate.Loader.Criteria.CriteriaLoader..ctor(IOuterJoinLoadable persister, ISessionFactoryImplementor factory, 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>;
}
答案 0 :(得分:1)
线索在你的筹码追踪中。
只有在您的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。