EF4 - выбранная хранимая процедура не возвращает столбцы - PullRequest
60 голосов
/ 20 августа 2011

У меня есть запрос в хранимой процедуре, которая вызывает некоторые связанные серверы с некоторым динамическим SQL.Я понимаю, что EF это не нравится, поэтому я специально перечислил все столбцы, которые будут возвращены.И все же это не нравится.Что я здесь не так делаю?Я просто хочу, чтобы EF мог определять столбцы, возвращенные из хранимой процедуры, чтобы я мог создавать нужные мне классы.

Пожалуйста, посмотрите следующий код, который составляет последние строки моей хранимой процедуры:

SELECT
    #TempMain.ID,
    #TempMain.Class_Data,
    #TempMain.Web_Store_Class1,
    #TempMain.Web_Store_Class2,
    #TempMain.Web_Store_Status,
    #TempMain.Cur_1pc_Cat51_Price,
    #TempMain.Cur_1pc_Cat52_Price,
    #TempMain.Cur_1pc_Cat61_Price,
    #TempMain.Cur_1pc_Cat62_Price,
    #TempMain.Cur_1pc_Cat63_Price,
    #TempMain.Flat_Length,
    #TempMain.Flat_Width,
    #TempMain.Item_Height,
    #TempMain.Item_Weight,
    #TempMain.Um,
    #TempMain.Lead_Time_Code,
    #TempMain.Wp_Image_Nme,
    #TempMain.Wp_Mod_Dte,
    #TempMain.Catalog_Price_Chg_Dt,
    #TempMain.Description,
    #TempMain.Supersede_Ctl,
    #TempMain.Supersede_Pn,
    TempDesc.Cust_Desc,
    TempMfgr.Mfgr_Item_Nbr,
    TempMfgr.Mfgr_Name,
    TempMfgr.Vendor_ID
FROM
    #TempMain
        LEFT JOIN TempDesc ON #TempMain.ID = TempDesc.ID
        LEFT JOIN TempMfgr ON #TempMain.ID = TempMfgr.ID

Ответы [ 13 ]

0 голосов
/ 07 декабря 2016
SET FMTONLY OFF 

работал для меня для одной процедуры, но не для другой процедуры. Следующие шаги помогут мне решить мою проблему

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

    Create table #temp
    (
       -- columns with same types as dynamic query    
    )
    
    EXEC sp_executeSQL @sql 
    
    insert into #temp 
        Select * from #temp 
    
    drop table #temp
    
  2. Удалены существующий сложный тип, функция импорта и экземпляр хранимой процедуры для старой хранимой процедуры и обновленная модель сущности для текущей новой процедуры.

  3. Отредактируйте импортированную функцию в модальном объекте для требуемого сложного типа, вы получите всю информацию о столбце, которая не получается для предыдущей хранимой процедуры.

  4. Как только вы закончили создание типа, вы можете удалить временную таблицу из хранимой процедуры, а затем обновить Entity Framework.

0 голосов
/ 22 марта 2016

В моем случае SET FMTONLY OFF не работал.Метод, который я использовал, заключается в том, что я сделал резервную копию исходной хранимой процедуры и заменил ее только именем столбца, как показано в следующем запросе.

Select Convert(max,'') as Id,Convert(max,'') as Name

После этого изменения создайте новую функцию импорта сложного типа в структуре сущностей.После создания функции импорта и сложного типа замените указанный выше запрос исходной хранимой процедурой.

0 голосов
/ 16 февраля 2015

В моем случае добавление SET NOCOUNT ON; в начале процедуры решило проблему.В любом случае, это лучшая практика.

...