2012-04-09 113 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