2010-09-20 67 views
0

我正在使用Visual Studio 2010和實體框架(EF)。我正在使用存儲過程通過實體模型從數據庫中獲取數據並將其綁定到Gridview中。當我在SQL查詢中執行這個存儲過程時,它的返回列是動態生成的。即,執行(@PivotTableSQL)。 @PivotTableSQL包含動態生成的select語句。以下是我的存儲過程的代碼。實體框架4.0 - 函數導入 - 存儲過程結果集

但是,要創建複雜類型,請從實體模型瀏覽器窗口 - >添加函數導入窗口 - >複雜 - >獲取列信息,「所選存儲過程不返回任何列。消息被顯示。請給我一個解決方案,如何添加功能導入和獲取列信息(創建複雜類型)或任何其他備用解決方案的詳細信息。這阻止了我的進一步發展。提前致謝。

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 

回答

0

我認爲你的問題是,因爲你動態執行最後的語句實體框架無法在設計時找出結果集結構。

有幾個方法,你可以嘗試解決此問題:

  1. 改變你的存儲過程,因此結果集結構可以在設計時進行想通了。例如,將結果放入臨時表或表變量中並從中選擇。

  2. 創建一個與最終的sproc具有相同名稱和簽名的虛擬sproc,該sproc包含一個select語句,該語句創建具有所需結構的結果集。 (例如,選擇cast(1作爲int),強制轉換(「a」作爲varchar(20))等等)刷新實體模型並添加函數import - EF將看到結構,並且可以創建實體收到結果。現在用您的最終版本替換數據庫中的虛擬sproc。

希望有所幫助。

相關問題