Entity Framework 4.0 - Импорт функции - Хранимая процедура Resultset - PullRequest
0 голосов
/ 21 сентября 2010

Я использую Visual Studio 2010 и Entity Framework (EF). Я извлекаю данные из базы данных и привязываю их к Gridview через Entity Model, используя хранимые процедуры. Когда я выполняю эту хранимую процедуру в SQL-запросе, она возвращает столбцы, которые генерируются динамически. т. е. выполнить (@PivotTableSQL). @PivotTableSQL содержит динамически сгенерированный оператор выбора. Ниже мой код хранимой процедуры.

Но, чтобы создать сложный тип, из окна браузера модели сущностей -> окно импорта Добавить функцию -> сложный -> получить информацию о столбцах, «выбранная хранимая процедура не возвращает столбцы» сообщение отображается. Пожалуйста, дайте мне решение, как добавить функцию импорта и получить информацию о столбце (создать сложный тип) или любое другое альтернативное решение в деталях. Этот остановил мое дальнейшее развитие. Заранее спасибо.

 alter PROCEDURE spGetQuestGrid
(
 @QID as int
)
AS
BEGIN

 SET NOCOUNT OFF

 SET FMTONLY OFF

 Declare @optId varchar(10)
 DECLARE @PivotColumnHeaders VARCHAR(MAX)
 DECLARE @PivotTableSQL NVARCHAR(MAX)

 set @optId = (select DISTINCT Optid from  QuestOptions where QID = @QID) 

 SELECT @PivotColumnHeaders = COALESCE(@PivotColumnHeaders + ', [' + cast(Caption as varchar) + ']' ,
        '[' + cast(Caption as varchar)+ ']')
        FROM OptionsDetail where OptId = @optId

 SET @PivotTableSQL = 'select * from (select  Caption,Optid  from OptionsDetail ) as datatable
        PIVOT
         ( min(Optid) FOR Caption IN ( '+ @PivotColumnHeaders + '))as Colltable'  

 Execute (@PivotTableSQL)  

END

1 Ответ

0 голосов
/ 02 ноября 2010

Я думаю, что ваша проблема в том, что, поскольку вы динамически выполняете последний оператор, Entity Framework не может определить структуру набора результатов во время разработки.

Есть несколько методов, которые вы можете попытаться преодолеть:

  1. Измените ваш sproc, чтобы структура результирующего набора могла быть выяснена во время разработки. Например, поместите результаты во временную таблицу или переменную таблицы и выберите из них.

  2. Создать фиктивный фрагмент с тем же именем и подписью, что и последний фрагмент, содержащий оператор выбора, который создает набор результатов с требуемой структурой. (Например, выберите приведение (1 как int), приведение («a» как varchar (20)) ... и т. Д.) Обновите модель вашей сущности и добавьте функцию import - EF увидит структуру и вы сможете создать Entity для получить результаты. Теперь замените фиктивный sproc в базе данных вашей окончательной версией.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...