EF函数导入无法识别StoredProc返回的列

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执行元数据调用时将执行存储过程,因此理想情况下,只有在存储过程不更改任何内容时才会使用此过程.

更新:另一种方法是确保存储过程实际工作.您可以做的另一件事是创建一个虚拟存储过程,它返回您想要的列,绑定到它然后执行实际逻辑.