Cap*_*chi 3 asp.net entity-framework sql-server-2008 visual-studio-2012
可能重复:
EF4 - 所选存储过程不返回任何列
我有一个存储过程,它填充#temp表,对其记录执行操作,然后选择记录.
问题是,当我尝试创建函数导入并单击[获取列信息]时,结果窗格显示消息"所选存储过程或函数不返回任何列".
现在,我知道它确实返回了列,因为如果我直接从db运行它,我会得到预期的结果集.
存储过程可以总结如下:
SELECT P.PersonID, P.Surname, P.NickName, P.DateofBirth
INTO #SeriesCompleted
FROM
Table1 T (NOLOCK)
INNER JOIN
Table2 P (NOLOCK) ON T.PID = P.PID
;
Select r.PID, SUM(rt.Distance) 'Distance'
INTO #Distance
FROM
#SeriesCompleted sc
inner join table3 rsr (NOLOCK) on rsr.SeriesId = sc.SeriesId
inner join table4 r (NOLOCK) on r.PID = sc.PID
inner join table5 rt (NOLOCK) on rt.RouteID = r.RouteID
GROUP BY r.PID;
UPDATE #SeriesCompleted
SET Distance = d.Distance
FROM #SeriesCompleted sc
INNER JOIN #Distance d on d.PID = sc.PPID;
--Here is where the result is returned.
SELECT distinct sc.PersonID, sc.NickName, sc.Surname, sc.DateofBirth, sc.NumberFinished, sc.Distance
FROM #SeriesCompleted SC
Run Code Online (Sandbox Code Playgroud)

Cap*_*chi 10
经过谷歌搜索后,我遇到了答案:EF4 - 选定的存储过程不返回任何列
EF无法从使用动态查询或临时表的存储过程中获取元数据.解决方案是手动创建复杂的返回类型或put
SET FMTONLY OFF
Run Code Online (Sandbox Code Playgroud)
在我的存储过程定义中.第二个选项的危险当然是当Visual Studio执行元数据调用时将执行存储过程,因此理想情况下,只有在存储过程不更改任何内容时才会使用此过程.
更新:另一种方法是确保存储过程实际工作.您可以做的另一件事是创建一个虚拟存储过程,它返回您想要的列,绑定到它然后执行实际逻辑.