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 タイプ、オブジェクト値、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 行目
これを解決する最善の方法は何ですか?もちろん、名前付きクエリは上記のものよりもはるかに複雑であるため、パラメーター リストを使用しない 2 番目のバージョンにコピーすることは避けたいと思います。