gpt4 book ai didi

c# - EF6 导入存储过程失败

转载 作者:行者123 更新时间:2023-11-30 12:46:17 25 4
gpt4 key购买 nike

这是一个简化版的存储过程

ALTER PROCEDURE [dbo].[StoredProc1]
(
@PageIndex INT = 1,
@RecordCount INT = 20,
@Gender NVARCHAR(10) = NULL
)
AS
BEGIN
SET NOCOUNT ON ;

WITH tmp1 AS
(
SELECT u.UserId, MIN(cl.ResultField) AS BestResult
FROM [Users] u
INNER JOIN Table1 tbl1 ON tbl1.UserId = u.UserId
WHERE (@Gender IS NULL OR u.Gender = @Gender)
GROUP BY u.UserID
ORDER BY BestResult
OFFSET @PageIndex * @RecordCount ROWS
FETCH NEXT @RecordCount ROWS ONLY
)
SELECT t.UserId, t.BestResult, AVG(cl.ResultField) AS Average
INTO #TmpAverage
FROM tmp1 t
INNER JOIN Table1 tbl1 ON tbl1.UserId = t.UserId
GROUP BY t.UserID, t.BestResult
ORDER BY Average

SELECT u.UserId, u.Name, u.Gender, t.BestResult, t.Average
FROM #tmpAverage t
INNER JOIN Users u on u.UserId = t.UserId

DROP TABLE #TmpAverage
END

当我使用 EF6 加载存储过程,然后转到“编辑函数导入”对话框时,那里没有显示任何列。即使在我要求检索列之后,我仍收到 SP 不返回列的消息。当我从 SMMS 执行 SP 时,我得到了预期的 [UserId, Name, Gender, BestResult, Average] 记录列表。

知道如何调整存储过程或 EF6 以使其工作吗?提前致谢

最佳答案

感谢上面的评论,很遗憾,EF6 不能很好地处理存储过程中的 TMP 表。

一种解决方法如下:
1) 注释掉存储过程中的所有临时表调用。

2) 更改存储过程以返回一个假结果,其列名与预期结果完全相同

3) 将存储过程导入EF6

4) 双击函数导入/存储过程名称

5) 在 Edit Function Import 对话框中,检索 Columns 并创建一个新的 Complex Type 以匹配假列

6) CTRL+Save 为了生成所有的C#代码

7) 通过删除伪造的结果集并使用临时表取消注释代码来重新更新存储过程。

这应该可以完成工作。

附言特别感谢帮我指出正确位置的 helper !!!

关于c# - EF6 导入存储过程失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20746034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com