实体框架在调用存储过程时显示错误

时间:2013-05-30 09:32:51

标签: asp.net entity-framework c#-4.0 stored-procedures

在我的项目中,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

1 个答案:

答案 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)