我在处理发送到 NHibernate 中的命名查询的参数列表为空的情况时遇到问题。
这是我的情况的一个例子:
<sql-query name="MyClass_FilterByCategoryID">
<return alias="MyClass" class="MyProject.BusinessEntities.MyClassBE"/>
<![CDATA[
SELECT DISTINCT MyClass.*
FROM MyClassTable MyClass
WHERE 1 = 1
AND MyClassTable.CategoryID NOT IN (:categoryIDs)
]]>
</sql-query>
这是被调用的方法:
public IList<MyClassBE> FilterByCategoryID(List<String> categoryIDs)
{
return session.GetNamedQuery("MyClass_FilterByCategoryID")
.SetParameterList("categoryIDs", categoryIDs)
.List<MyClassBE>();
}
但是,当我将一个空列表传递给该方法时,我收到此错误:
System.NullReferenceException :对象引用未设置为对象的实例。
服务器堆栈跟踪:
在 C:\junctions\BS\3rdParty\NHibernate.2.1.2.GA-src\src\NHibernate\Engine\TypedValue.cs 中的 NHibernate.Engine.TypedValue..ctor(IType type, Object value, EntityMode entityMode): 行25
在 C:\junctions\BS\3rdParty\NHibernate.2.1.2.GA-src\src\NHibernate\Impl\AbstractQueryImpl.cs 中的 NHibernate.Impl.AbstractQueryImpl.SetParameterList(String name, ICollection vals, IType type):第 647 行
在 C:\junctions\BS\3rdParty\NHibernate.2.1.2.GA-src\src\NHibernate\Impl\AbstractQueryImpl.cs 中的 NHibernate.Impl.AbstractQueryImpl.SetParameterList(String name, ICollection vals):第 666 行
在 MyClassDao.cs 中的 MyProject.Dao.MyClassDao.FilterByCategoryID(List`1 categoryIDs):第 50 行
解决这个问题的最佳方法是什么?请注意,命名查询当然比上面介绍的要复杂得多,所以我想避免将它复制到不使用参数列表的第二个版本。