存储过程动态sql在实体框架4.1中

时间:2012-04-09 08:35:33

标签: c# entity-framework-4.1

我在基于参数执行不同的结果集时遇到问题。 我有一个sp,它根据参数执行两个查询,两个查询都执行一次,例如:

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 个答案:

答案 0 :(得分:1)

从SP返回的表中的列名将根据“上下文”而有所不同,因此EF只能将它们映射到其中一个上下文中的实体属性。从同一存储过程返回不同的列名称是不好的做法,因此您需要做的是使它们适用于所有上下文/场景。

您可以使用AS关键字来执行此操作:

SELECT CustomerName AS Name, CustomerAddress AS Address FROM Customer

SELECT EmployeeName AS Name, EmployeeAddress AS Address FROM Employee