我正在開發一個遷移項目,我正在將Web窗體應用程序遷移到ASP.NET MVC 4應用程序。實體框架導入並使用根據輸入返回不同結果集的存儲過程
我遇到過這種情況,我需要一點幫助。
在舊的Web窗體項目我已存儲的過程就像...
ALTER PROCEDURE [dbo].[TestMultipleResultSet]
@input VARCHAR
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS
(
SELECT * FROM Electronics
WHERE name = @input
)
BEGIN
SELECT 101 AS errorcode
RETURN
END
SELECT * FROM Electronics
WHERE name = @input
END
像上面if not exist
檢查,還有許多其他的檢查,以使不同select * from
的結果集。
現在我想使用實體框架來執行這個存儲過程,所以我導入了函數,並使用EF提供的Get Column Information
+ Create Complex Type
選項創建了一個複雜類型。
現在它運行時,當我輸入一個有效的@輸入執行SELECT * FROM Electronics WHERE name = @input
,但是當我輸入一個不存在的輸入,而不是給我一個101錯誤代碼,它給了我一個錯誤。拋出異常。
異常詳細
數據讀取器是與指定的 'testEFModel.GetTestResults_Result1' 不相容。類型'id'的成員在數據閱讀器中沒有相應的列,名稱相同。
我應該如何解決這個問題?
這是一個非常糟糕的主意**從單個存儲過程返回不同形狀的結果集。 EF不支持這一點 - 而且很可能永遠不會。重新設計你的系統 - 爲你可能得到的每種類型/形狀的結果使用一個存儲過程.... –