1

在我的项目中,EF 调用了一个存储过程,如下所示。它返回 1 或范围标识。

在 EF 函数导入中,存储过程以十进制的返回类型列出。

当存储过程返回作用域标识时,一切正常。

但是当 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
4

1 回答 1

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)
于 2013-05-30T10:10:42.640 回答