4

我已经阅读了很多关于如何处理这个问题的帖子。这些都不起作用。这是我的场景:

我有以下存储过程(完全按照脚本编写,除了我更改了架构、表和列名以对其进行去标识化):

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

当我将其导入实体框架时,它似乎工作正常。但是,当我单击“获取列信息”按钮时,我收到以下消息:

选定的存储过程或函数不返回任何列。

我努力了:

  • 设置 FMTONLY 关闭
  • 设置无计数
  • 将存储过程移动到dbo架构
  • 使用 sproc ( SELECT cast (1 AS int) as SomeColumn)变得更加简单
  • 删除和重新添加存储过程(通过模型浏览器)
  • 重新启动 Visual Studio。

这可能是 SQL Server 2012 的问题吗?

4

3 回答 3

2

将其更改为更像这样的阅读...

SELECT  SomethingNeeded.ThingGroupId
FROM    ReferenceSchema.SomethingNeeded 
WHERE   SomethingNeeded.ThingId = 4655946989

EF 不理解您的别名。

而且绝对没有理由(NOLOCK)

另外,请确保该表存在。

于 2013-05-28T23:00:58.370 回答
2

我想到了。我在 app.config 中的连接字符串设置为使用 SQL 用户。

该用户的权限有限。当我将其更改为使用集成安全性时,一切正常。

如果 Entity Framework 能让我知道它失败了,那就太好了,但现在我知道并将确保我拥有正确的权限......

于 2013-05-29T18:43:00.847 回答
1

我有同样的问题,在这里和其他地方提到的所有问题中都没有找到解决方案。但是,手动添加复杂类型并将其设置为过程的函数导入的结果总是有效的。这是 5 分钟的工作,唯一的条件是属性必须按类型和名称匹配过程返回的列。您可以从模型浏览器执行此操作,当然也可以手动编辑 edmx 文件。

于 2014-12-13T15:51:49.613 回答