C# 返回复杂类型列表中的存储过程结果
我有下面的存储过程,它调用一个返回多行的动态查询C# 返回复杂类型列表中的存储过程结果,c#,entity-framework,stored-procedures,C#,Entity Framework,Stored Procedures,我有下面的存储过程,它调用一个返回多行的动态查询 CREATE PROCEDURE [dbo].[usp_list_connections] @skip int, @take int = 50 WITH EXECUTE AS OWNER AS BEGIN IF 1 = 2 -- For EF to recognize columns BEGIN SELECT CAST(1 AS int) [Id], CAST('A' AS nvarchar(100)) [N
CREATE PROCEDURE [dbo].[usp_list_connections] @skip int, @take int = 50
WITH EXECUTE AS OWNER
AS
BEGIN
IF 1 = 2 -- For EF to recognize columns
BEGIN
SELECT CAST(1 AS int) [Id], CAST('A' AS nvarchar(100)) [Name], CAST(1 AS bit) [Sim], CAST(1 AS bit) [Device]
END
DECLARE @q NVARCHAR(MAX) ='';
SET @q = N'
SELECT DISTINCT e.[Id], e.[Name],
CASE
WHEN s.[Sim] IS NULL THEN 0
ELSE 1 END AS [Sim],
CASE
WHEN d.[Device] IS NULL THEN 0
ELSE 1 END AS [Device]
FROM [dbo].[Employee] e
LEFT JOIN [dbo].[Sim] s ON s.[Employee] = e.[Id]
LEFT JOIN [dbo].[Device] d ON d.[Employee] = e.[Id]
ORDER BY e.[Name]
OFFSET @skip ROWS
FETCH NEXT @take ROWS ONLY;'
SET @q = REPLACE(@q, '@skip', @skip);
SET @q = REPLACE(@q, '@take', @take);
EXEC sp_executesql @q;
END
我将过程导入EF并将其映射到复杂类型。当我尝试使用以下代码通过EF运行该过程时
var result = db.usp_list_connections(0,50);
它返回以下错误消息:
“查询结果不能枚举多次。”
我做错了什么?如何将此存储过程的结果集存储在变量中?
提前感谢。尝试通过调用
ToList()实现您的查询。
可能会解决您的问题:
var result = db.usp_list_connections(0,50).ToList();
尝试此操作时,我收到以下错误消息:“System.InvalidOperationException”类型的异常出现在EntityFramework.dll中,但未在用户代码中处理其他信息:“usp\u列表\u连接\u结果”上的“Sim”属性无法设置为“System.Int32”值。您必须将此属性设置为“System.Boolean”类型的非空值。@tatgergo确保您的
DatabaseContext
连接到正确的数据库。你的模式和实体匹配。我检查过了,它们匹配。我连接到正确的数据库。