Как передать параметры хранимой процедуре в NHibernate, когда один из параметров является списком? - PullRequest
3 голосов
/ 08 августа 2011

У меня есть сохраненный процесс, отображаемый в 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 () он должен «Связать несколько значений с именованным параметром запроса» . Я предполагаю, что проблема в файле сопоставления:

 exec dbo.SelectHistoricResultItem :StartDate, :EndDate, :ListA, :ListB, :ListC

но я понятия не имею, как еще структурировать это, чтобы учесть несколько параметров. Может кто-нибудь сказать мне, как это делается?

Спасибо, <3 </p>

1 Ответ

3 голосов
/ 09 августа 2011

Хорошо, после некоторых экспериментов я обнаружил, что этот метод работает для меня.

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