nhibernate - 当参数之一是列表时,如何将参数传递给 NHibernate 中的存储过程?

标签 nhibernate stored-procedures parameter-passing

我在 NHibernate 中有一个按如下方式映射的存储过程:

 <sql-query name="HistoricSearch">
     <return class="ResultItem">
     </return>
     exec dbo.SelectHistoricResultItem :StartDate, :EndDate, :ListA, :ListB, :ListC
 </sql-query>

如果每个搜索选项列表都包含一个参数,则以下代码可以正常工作:
 IQuery query = session.GetNamedQuery("HistoricSearch");
            query.SetDateTime("StartDate", fromDate);
            query.SetDateTime("EndDate", toDate);
            query.SetParameterList("ListA", searchOptionA);
            query.SetParameterList("ListB", searchOptionB);
            query.SetParameterList("ListC", searchOptionC);
            List<ResultItem> resultItems = (List<ResultItem>)query.List<ResultItem>();
            return resultItems;

但如果一个列表包含多个值,我会收到以下错误:
 Procedure or function SelectHistoricResultItem has too many arguments specified

根据 SetParameterList() 方法的描述,它应该“将多个值绑定(bind)到一个命名的查询参数”。我认为问题出在映射文件中:
 exec dbo.SelectHistoricResultItem :StartDate, :EndDate, :ListA, :ListB, :ListC

但我不知道如何构造它以允许多个参数。谁能告诉我这是怎么做到的?

谢谢 <3

最佳答案

好的,经过一些实验,我发现这种方法对我有用。

            query.SetParameter("ListA", string.Join(", ", searchOptionA));
            query.SetParameter("ListB", string.Join(", ", searchOptionB));
            query.SetParameter("ListC", string.Join(", ", searchOptionC));

关于nhibernate - 当参数之一是列表时,如何将参数传递给 NHibernate 中的存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6984791/

相关文章:

stored-procedures - 存储过程和准备好的语句之间的区别?

c++ - 在模板类中通过引用传递

c - 动态内存访问仅在函数内部有效

nhibernate - 为什么二级缓存不用于特定实体?

nhibernate - List<string> 的流畅 NHIbernate 自动映射?

c# - 全网数据同步

asp.net-mvc - ASP.Net MVC 和 N 层

sql - 使用动态 sql 在存储过程中填充临时变量

Sql Server - 如何根据纬度/经度最小值最大值查询地理列

java - ReSTLet,带参数的 get 示例