NHibernate - заполнять данные из нескольких хранимых процедур - PullRequest
1 голос
/ 20 января 2011

Да, еще один вопрос о nhibernate & хранимых процедурах, извините ...

У меня есть две хранимые процедуры, которые возвращают одну и ту же структуру (поэтому я хотел бы связать их с одним и тем же классом), единственное отличиеявляется условием 'где' во второй хранимой процедуре.Могу ли я связать обе хранимые процедуры с моим классом?Как будет выглядеть файл сопоставления?Или вы бы предпочли разные подходы:

  • используйте только одну хранимую процедуру и добавьте новый входной параметр, который говорит, как процедура должна вести себя
  • вообще не используйте NHibernate - используйте вместо этого DataAdapter
  • создать представление (но в моем примере я не знаю, как ...)
  • ...

Первая хранимая процедура:

ALTER procedure [BadCodes].[GetCodesBetween]
    @codeFrom bigint,
    @codeTo bigint
as
begin
    set nocount on

    ;with BadCodesOriginal as (
        select Code 
        from Scanning.BadCodes 
        where Code between @codeFrom and @codeTo
    ),
    BadCodesScanned as (
        select Code, count(*) NumberOfBadCodesScanned 
        from BadCodes.Scan
        where Code between @codeFrom and @codeTo
        group by Code
    )
    select t1.Code Code, isnull(t2.NumberOfBadCodesScanned, 0) NumberOfBadCodesScanned
    from BadCodesOriginal t1 left join BadCodesScanned t2 on (t1.Code = t2.Code)
    order by t1.Code
end

Вторая хранимая процедура:

ALTER procedure [BadCodes].[GetCodesBetweenDifference]
    @codeFrom bigint,
    @codeTo bigint
as
begin
    set nocount on

    ;with BadCodesOriginal as (
        select Code 
        from Scanning.BadCodes 
        where Code between @codeFrom and @codeTo
    ),
    BadCodesScanned as (
        select Code, count(*) NumberOfBadCodesScanned 
        from BadCodes.Scan
        where Code between @codeFrom and @codeTo
        group by Code
    )
    select t1.Code Code, isnull(t2.NumberOfBadCodesScanned, 0) NumberOfBadCodesScanned
    from BadCodesOriginal t1 left join BadCodesScanned t2 on (t1.Code = t2.Code)
    where isnull(t2.NumberOfBadCodesScanned, 0) <> 1
    order by t1.Code
end

А это мой класс:

public class CheckedBadCodeOverview
    {
        public virtual long Number { get; set; }
        public virtual int NumberOfScans { get; set; }

        public CheckedBadCodeOverview()
        {
        }
    }

1 Ответ

2 голосов
/ 21 января 2011

Просто добавьте <sql-query> для каждого SP.

Проверьте 16.2.2.Использование хранимых процедур для запроса

...