2013-03-13 54 views
4

我正在使用存储过程的实体框架,其中我动态生成查询并执行该查询。该存储过程查询看起来像:存储过程获取列信息不会返回任何内容?

Begin 
    DECLARE @Query nvarchar(MAX) 
    SET @Query = 'SELECT e.id, e.name, e.add, e.phno from employee' 
    EXEC sp_executesql @Query 
End 

在上面的SQL代码,你可以看到,我执行'@Query'变量,而变量值可以动态改变。

我可以在我的edmx文件中添加我的存储过程。然后我去模型浏览器,并说Add function import,并尝试Get column information它不显示任何东西。但是当我在服务器上执行我的存储过程时,它会返回所有包含值的列。为什么我没有在模型浏览器上获取列信息?

+0

可能的重复[为什么不能实体框架看到我的存储过程的列信息?](https://stackoverflow.com/questions/5996887/why-cant-entity-framework-see-my-stored-procedures-列信息) – Matt 2017-07-17 14:59:20

回答

0

尝试增加SET NOCOUNT ONBEGIN ....这supresses可能会导致它被“迷惑”

+0

谢谢..我已经添加设置nocount,但它不会工作... – swan 2013-03-13 12:27:06

1

模型浏览器未运行存储过程,然后从其结果中收集列信息 - 它试图使用sys表从基础过程定义中获取列信息。

此过程因为是动态的,所以不会有基础定义,因此不会像这样可导入到EDMX中。

+0

谢谢..有没有其他方式来获取模型bowser列信息? – swan 2013-03-13 12:24:42

+0

对不起,但我不知道有什么方法。 – 2013-03-13 12:27:34

+0

好的谢谢............ – swan 2013-03-13 12:28:36

1

临时更改存储过程来

SELECT TOP 1 e.id, e.name, e.add, e.phno from employee /* ... rest of your proc commented out */ 

然后把它添加到EF和建立消息函数导入(它会看到列)。

然后把proc改回到上面的样子。