实体框架 4.1 中的存储过程动态 SQL

本文关键字:存储过程 动态 SQL 框架 实体 | 更新日期: 2023-09-27 18:30:24

我在根据参数执行不同的结果集时遇到问题。我有一个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 的错误。但是即使我通过第一个查询调用,此错误也很少发生。

如何实现此功能?

实体框架 4.1 中的存储过程动态 SQL

从 SP 返回的表中的列名将根据"上下文"而有所不同,因此 EF 只能将它们映射到其中一个上下文中的实体属性。 从同一存储过程返回不同的列名是一种不好的做法,因此您需要做的是使它们在所有上下文/方案中保持一致。

您可以使用 AS 关键字执行此操作,如下所示:

SELECT CustomerName AS Name, CustomerAddress AS Address FROM Customer

SELECT EmployeeName AS Name, EmployeeAddress AS Address FROM Employee