9

我整个上午都在搞这个,但我找不到答案。我正在尝试使用 EF 来引用存储过程,但无论我尝试什么,我都无法让它显示在模型浏览器中。

我已使用以下步骤尝试将程序放入模态:

  1. 将过程添加到实体模型

  2. 右键单击模型并选择添加新-> 功能导入

  3. 给它一个名字并选择我的程序

  4. 生成一个新的复杂集合(我也尝试过使用实体,但都不起作用)

  5. 点击确定

我做过很多次,在模型的“函数Imports”文件夹中可以看到函数,但是模型中从来没有出现过,所以无法引用。

我发现我可以通过执行以下操作直接引用存储过程(无需导入):

    DBEntities db = new DBEntities();
    var test = db.gsp_GetGroups();

IQueryable<T>但是,如果没有大的解决方法 ,我无法将其转换为。

有谁知道我缺少哪些步骤才能正确添加?

谢谢

PS VS 2012,asp.net 4.0

4

5 回答 5

13

验证您用于生成 EF 模型的 SQL 登录是否有权执行您尝试导入的存储过程。

  1. 转到您的 App.config 并查找connectionStrings条目(通常在底部)。如果您有超过 1 个连接字符串,那么您想要的就是您的上下文使用的那个。
    • 转到您的 edmx 文件并向下钻取以找到实体类。
    • 例如,如果您拥有MyDbModel.edmx,那么在该之下您将拥有MyDbModel.Context.ttwhich 又将包含MyDbModel.Context.cs.
    • MyDbModel.Context.cs文件中,您将拥有一个继承自的类,DbContext并且构造函数将调用base("name=<your connection string name>")
    • <your connection string name>是您在 app.config 中寻找的那个。
  2. 您的连接字符串显示用户(集成安全性意味着登录的 AD 用户。这仅在使用您的程序的每个人都具有正确的数据库访问权限时才有效。这在生产环境中可能是一个冒险的假设)
  3. 转到 SQL Management Studio 并将此存储过程添加到用户的“Securables”
于 2014-02-11T00:43:14.647 回答
8

进入Sql Server Management Studio中的SP,右键属性,进入权限设置public为Execute。

以上都可能是权限问题的答案,以上答案让我了解了原因并得出了结论。

于 2015-01-23T21:38:49.867 回答
6

这可能是因为 Entity Framework 使用无权执行存储过程的用户 ID 登录数据库。

找出:

在 .NET 项目的 app.config 或 web.config 文件中,检查哪个user id正在访问数据库。connectionString之后你会看到它user id=

如果它与您用于编写存储过程(即在 SQL 中)的用户 ID 不同,请与您的数据库管理员联系,以查看您的 .NET(以及实体框架)中的该用户 ID 是否具有执行存储过程的权限。

于 2014-03-06T18:29:34.557 回答
2

我有一个类似的问题,从 Entity Framework 5 升级到 6 为我解决了这个问题。

对我来说,它没有在存储过程下显示我的自定义 sql server 架构,尽管它在表格部分正确显示了相同的架构。

希望这对其他人有帮助。

于 2014-11-21T05:02:36.940 回答
1

@Limey您的问题可能是由Access您的导入功能级别引起的。尝试这个:

Model Browser文件夹中找到Function Inports。现在右键单击您的功能并选择Properties。在属性窗口中,第一个选项应将其Access更改为Public并保存您的 model.edmx。

返回您的代码,看看这是否有效。

于 2013-07-12T17:05:32.770 回答