【问题标题】:Entity Framework 4.0 - Function Import - Stored procedure ResultsetEntity Framework 4.0 - 函数导入 - 存储过程结果集
【发布时间】:2010-09-20 23:22:49
【问题描述】:

我正在使用 Visual Studio 2010 和实体框架 (EF)。我正在使用存储过程从数据库中检索数据并通过实体模型绑定到 Gridview。当我在 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

【问题讨论】:

    标签: entity-framework-4


    【解决方案1】:

    我认为您的问题是因为您动态执行最终语句,实体框架无法在设计时弄清楚结果集结构。

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

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

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

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-09
      • 2016-08-21
      • 1970-01-01
      • 2011-07-14
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多