实体框架 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 生成具有两个字段的复杂类型,CustomerName
、CustomerAddress
。EF 抛出 IDataReader
的错误。但是即使我通过第一个查询调用,此错误也很少发生。
如何实现此功能?
从 SP 返回的表中的列名将根据"上下文"而有所不同,因此 EF 只能将它们映射到其中一个上下文中的实体属性。 从同一存储过程返回不同的列名是一种不好的做法,因此您需要做的是使它们在所有上下文/方案中保持一致。
您可以使用 AS 关键字执行此操作,如下所示:
SELECT CustomerName AS Name, CustomerAddress AS Address FROM Customer
和
SELECT EmployeeName AS Name, EmployeeAddress AS Address FROM Employee