У меня проблемы с обработкой ситуации, когда список параметров, отправляемых на именованный запрос в 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: ссылка на объект не установлена для экземпляра объекта.
Трассировка стека серверов:
в NHibernate.Engine.TypedValue..ctor (тип IType, значение объекта, EntityMode entityMode) в C: \ junctions \ BS \ 3rdParty \ NHibernate.2.1.2.GA-src \ src \ NHibernate \ Engine \ TypedValue. CS: строка 25
в NHibernate.Impl.AbstractQueryImpl.SetParameterList (имя строки, значения ICollection, тип IType) в C: \ junctions \ BS \ 3rdParty \ NHibernate.2.1.2.GA-src \ src \ NHibernate \ Impl \ AbstractQueryImpl.cs : строка 647
в NHibernate.
в MyProject.Dao.MyClassDao.FilterByCategoryID (List`1 categoryIDs) в MyClassDao.cs: строка 50
Каков наилучший способ решить эту проблему? Обратите внимание, что именованный запрос, конечно, намного сложнее, чем представленный выше, поэтому я бы хотел не копировать его во вторую версию, не использующую список параметров.