在我的项目中,EF调用一个存储过程,如下所示。它返回1或范围标识。
在EF函数导入中,列出的存储过程的返回类型为decimal。
当存储过程返回范围标识时,一切正常。
但是当sp的条件满足时,ef会抛出错误
商店数据提供程序返回的数据读取器没有足够的列用于请求的查询。
请帮助..
这是我的存储过程:
@VendorId int,
@ueeareaCode varchar(3),
@TuPrfxNo varchar(3),
@jeeSfxNo varchar(4),
@Tjode varchar(3),
@uxNo varchar(3),
@TyufxNo varchar(4),
@Iyuy bit
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
SET NOCOUNT ON;
IF EXISTS (Select dfen_id
from dbo.efe_phfedwn_eflwn
where
[yu] = @Tyuode and
[uy] = @TuyxNo and
[yuno] = @Tuo)
return 1
ELSE
Begin
INSERT INTO dbo.yu
....................
Select Scope_Identity()
End
END
答案 0 :(得分:1)
错误告诉我们EF期望结果集,当我们使用RETURN
时,我们没有得到结果集。您的错误意味着存储过程返回一个整数但EF期望一个小数,所以我们只将CAST
所选的值改为小数。
所以修改SQL以便我们SELECT
代替RETURN
,就像这样(不要忘记使用CAST
):
IF EXISTS (Select cntct_ctr_phn_ln_id
from dbo.cntct_ctr_phn_ln
where
[toll_free_phn_area_cd] = @TollfreeareaCode and
[toll_free_phn_prfx_no] = @TollfreePrfxNo and
[toll_free_phn_sfx_no] = @TollfreeSfxNo)
SELECT CAST(1 AS decimal)
然后还CAST
SCOPE_IDENTITY()
到小数的结果:
SELECT CAST(SCOPE_IDENTITY() AS decimal)