2011-01-20 1 views
1

Да, еще один NHibernate & хранимые процедуры вопрос, извините ...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() 
     { 
     } 
    } 

ответ