2012-04-09 109 views
0

我有一個問題,同時根據參數執行不同的結果集。 我有exec的參數的基礎上,兩個查詢一個SP,這兩個查詢執行一次例如:存儲過程動態sql在實體框架4.1

CREATE PROCEDURE [dbo].[ShowMessages]   
    @context int, 
AS 
     BEGIN 
     --CALENDAR ADMIN QUEUE 
     if @context = 1 
      BEGIN 
      Select CustomerName, CustomerAddress from Customer 
      END 
     ELSE if @queueContext = 2 OR @queueContext = 6 
      BEGIN 
      Select EmployeeName, EmployeeAddress from Employee 
      END 
END 

=== 我和複雜類型映射是:EF產生複雜類型兩個字段CustomerNameCustomerAddress 。 EF引發錯誤IDataReader。但是這個錯誤很少發生,即使我通過第一個查詢來調用。

我該如何實現此功能?

回答

1

根據「上下文」,從SP返回的表中的列名將有所不同,因此EF只能將它們映射到其中一個上下文中的實體屬性。從相同的存儲過程返回不同的列名是個不好的做法,所以你需要做的是使它們對所有上下文/場景保持一致。

您可以通過使用AS關鍵字,像這樣做:

SELECT CustomerName AS Name, CustomerAddress AS Address FROM Customer 

而且

SELECT EmployeeName AS Name, EmployeeAddress AS Address FROM Employee 
+0

感謝您的快速反應,但對我來說,有建築的義務,是否有任何固體證明它不可能? – 2012-04-09 08:59:01

+0

很少發生此錯誤。如果我@context = 1總是。 – 2012-04-09 09:05:28

+1

沒有證據需要。 EF在設計時將結果集中的列名映射到複雜類型的屬性名稱,並且只有一組映射是可能的。所以你可以映射第一個或第二個查詢,但不能同時映射。對查詢中的列使用相同的名稱,或使用兩個不同的SP並根據上下文值調用它們。 – 2012-04-09 09:13:53