实体框架4.0 - 功能导入 - 存储过程结果集

时间:2010-09-20 23:22:49

标签: entity-framework-4

我正在使用visual studio 2010和Entity Framework(EF)。我正在从数据库中检索数据并使用存储过程通过实体模型绑定到Gridview。当我在SQL查询中执行此存储过程时,它返回动态生成的列。即,执行(@PivotTableSQL)。 @PivotTableSQL包含动态生成的select语句。以下是我的存储过程代码。

但是,要创建复杂类型,请从实体模型浏览器窗口 - >添加功能导入窗口 - >复杂 - >获取列信息,“选定的存储过程不返回任何列。”消息显示。请给我一个解决方案,如何添加功能导入和获取列信息(创建复杂类型)或任何其他替代解决方案的详细信息。这个阻止了我的进一步发展。提前谢谢。

 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 :(得分:0)

我认为你的问题是因为你动态执行final语句Entity Framework无法在设计时找出结果集结构。

有几种方法可以尝试克服这个问题:

  1. 更改您的sproc,以便在设计时计算出结果集结构。例如,将结果放入临时表或表变量中并从中进行选择。

  2. 创建一个与最终sproc具有相同名称和签名的虚拟sproc,其中包含一个select语句,该语句创建具有所需结构的结果集。 (例如,选择强制转换(1为int),强制转换(“a”为varchar(20))...等等。刷新实体模型并添加函数import - EF将看到结构,您可以创建实体收到结果。现在用最终版本替换数据库中的虚拟sproc。

  3. 希望有所帮助。