2013-05-30 2 views
1

В моем проекте EF вызывает хранимую процедуру, которая показана ниже. Он возвращает либо 1, либо идентификатор области видимости.Entity Framework показывает ошибку при вызове хранимой процедуры

При импорте функции EF хранимая процедура указана с типом возвращаемого значения десятичного числа.

Когда хранимая процедура возвращает идентификатор объема, все в порядке.

Но когда, если условие зр удовлетворяет, эф бросает ошибку как

Считыватель данных, возвращенный поставщик магазина данных не имеет достаточное количество столбцов для запроса запрошенного.

Pls помощь ..

Это моя хранимая процедура:

@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

Я не очень опытен с EF, но возможно ли, что, поскольку вы возвращаетесь 1 или выбираете 'Scope_Identity(), у него возникают трудности? Не могли бы вы попробовать изменить 'Select Scope_Identity()' на 'RETURN Scope_Identity()' и посмотреть, не изменилось ли это? – Sean

+0

Если это не решит проблему (у меня нет больших надежд), было бы полезно, если бы другие люди увидели код, который использует EF, чтобы получить результат этого SP, кода модели или всего, что есть – Sean

+0

no , Я тестировал с использованием return. Но теперь он показывает ту же ошибку в обоих случаях. Позже он показывался только тогда, когда условие удовлетворяет. –

ответ

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) 
+0

Большое спасибо. он решил мою проблему. –

+0

Нет проблем вообще =] – Sean

+0

Если Sp возвращает как десятичное, так и целочисленное значение, не делая приведения на уровне sp, - это любой другой способ обработки на уровне Ef, так что Ef может принимать и использовать и конвертировать на уровне кода. –

Смежные вопросы