我已经阅读了很多关于如何处理这个问题的帖子。这些都不起作用。这是我的情景:
我有以下的sproc(完全如脚本,除了我更改了模式,表和列名称以去除它):
USE [DevelopmentDatabase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
alter PROCEDURE [MyCustomSchema].[GetSomethingINeed]
AS
BEGIN
SELECT things.ThingGroupId
FROM ReferenceSchema.SomethingNeeded things (NOLOCK)
WHERE things.ThingId = 4655946989
END
GO
当我将其导入实体框架时,似乎工作正常。但是当我点击“获取列信息”按钮时,我收到此消息:
选定的存储过程或函数不返回任何列。
我试过了:
dbo
架构SELECT cast (1 AS int) as SomeColumn
)这可能是SQL Server 2012问题吗?
答案 0 :(得分:2)
将其更改为更像这样......
SELECT SomethingNeeded.ThingGroupId
FROM ReferenceSchema.SomethingNeeded
WHERE SomethingNeeded.ThingId = 4655946989
EF不了解您的别名。
绝对没有理由(NOLOCK)
另外,请确保该表存在。
答案 1 :(得分:2)
我明白了。我在app.config中的连接字符串设置为使用SQL用户。
该用户的权限有限。当我将其更改为使用集成安全性时,一切正常。
如果实体框架让我知道它失败了会很好,但现在我知道并确保我拥有正确的权限......
答案 2 :(得分:1)
我遇到了同样的问题,并没有在这里和其他地方提到的解决方案中找到解决方案。 但是,手动添加复杂类型并将其设置为该过程的函数导入的结果总是有效。这是5分钟的工作,唯一的条件是属性必须按类型和名称匹配过程返回的列。您可以从模型浏览器中执行此操作,或者手动编辑edmx文件。