微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – EF6无法导入存储过程

这是存储过程的简化版本

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.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)在“编辑函数导入”对话框中,检索“列”并创建与假列匹配的“新建复杂类型”

6)CTRL保存以生成所有C#代码

7)通过删除伪结果集重新更新存储过程,并使用Temp表取消注释代码.

那应该做的.

附:特别感谢那些把我指向正确位置的助手!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐