NHibernate - возврат выходного параметра из сопоставленной хранимой процедуры - PullRequest
2 голосов
/ 26 мая 2011

У меня есть хранимая процедура, которую я сопоставил через NHibernate.Sproc возвращает как результирующий набор, так и выходной параметр, в основном счетчик всех записей, за которыми следует сам набор результатов.Примерно так:

CREATE PROCEDURE [dbo].[mySproc]
(
    @StartRecord            INT = 1,
    @EndRecord              INT = 10,
    @TotalRecords       INT OUTPUT
)
AS
BEGIN
    SET NOCOUNT ON

    // Do a count
    SELECT @TotalRecords = COUNT(DISTINCT x.Id)
    FROM Blah ...snip

    // Perform a query with paging
    SELECT
        x.Id,
        x.Column1
    FROM ...some really complex query that uses paging
END

Я реализую пейджинг через Sproc и, следовательно, мне нужно получить общее количество записей.Запрос является довольно сложным с объединениями нескольких таблиц, потенциально довольно медленным, и поэтому требует осторожности, тонкой настройки и оптимизации от написания T-SQL напрямую.

Моя проблема в том, что я не могу получить в OUTPUTпараметр в Sproc (@TotalRecords).Я сопоставил этот Sproc следующим образом:

<class name="MyLibrary.SomeClass, MyLibrary">

    <id name="Id" type="Int32" />
    <property name="Column1" type="String" length="50" not-null="false" />

</class>

<sql-query name="mySproc">
    <return class="MyLibrary.SomeClass, MyLibrary">
        <return-property name="Id" column="Id"/>
        <return-property name="Column1" column="Column1"/>
    </return>

    EXEC mySproc
        @StartRecord = :startRecord,
        @EndRecord = :endRecord,
        @TotalRecords = 0

</sql-query>

И я могу получить результат примерно так:

IList<SomeClass> records = Session.GetNamedQuery("mySproc")
    .SetParameter("startRecord", 1, NHibernateUtil.Int32)
    .SetParameter("endRecord", 20, NHibernateUtil.Int32)
    .List<SomeClass>();

Но как мне получить выходной параметр @TotalRecords?

1 Ответ

2 голосов
/ 26 мая 2011

Кажется, это нельзя сделать напрямую:

...