Да, еще один 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()
{
}
}