【问题标题】:Entity Framework can't run stored procedure实体框架无法运行存储过程
【发布时间】:2013-12-25 00:59:28
【问题描述】:

我是第一次使用实体框架。这是一个简单的应用程序,可以查找零件编号并在网格中显示它们。我的应用程序在本地运行良好,但是当我对生产 SQL Server 数据库执行时,使用 Entity Framework 调用存储过程的页面失败。

但是,它将运行对表的实体框架调用并返回数据,而不是存储过程。我这样做是为了填充一个下拉列表,它工作正常。当我调用存储过程返回搜索结果时,它失败了。

这可能是生产 SQL Server 上我的用户 ID 无权执行存储过程的设置吗?

这是日志中的错误消息:

日期/时间:2013 年 12 月 7 日下午 12:23:41

标题:错误
消息:执行命令定义时发生错误。有关详细信息,请参阅内部异常。
堆栈跟踪:
在 System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior 行为)
在 System.Data.Objects.ObjectContext.CreateFunctionObjectResult[TElement](EntityCommand entityCommand, ReadOnlyMetadataCollection1 entitySets, EdmType[] edmTypes, MergeOption mergeOption)
at System.Data.Objects.ObjectContext.ExecuteFunction[TElement](String functionName, MergeOption mergeOption, ObjectParameter[] parameters)
at System.Data.Objects.ObjectContext.ExecuteFunction[TElement](String functionName, ObjectParameter[] parameters)
at FanInfo.FandbEntities1.uspFANSearch(String idParm, Nullable
1 diaFromParm, Nullable1 diaToParm, Nullable1 hubFromParm, Nullable`1 hubToParm) 在 C:\Users\Public\Documents\Projects\Fan Info \Fan Info\Model1.Designer.vb:line 201
在 C:\Users\Public\Documents\Projects\Fan Info\Fan Info\Main.vb:line 208 中的 FanInfo.frmMain.LoadSearchResults()

【问题讨论】:

  • 你看到内部异常的细节了吗?
  • 它说“有关详细信息,请参阅内部异常。”这样做可以省去你提问的麻烦。

标签: c# sql-server vb.net sql-server-2008 entity-framework


【解决方案1】:

因为它可以在本地工作,但不能在生产环境中工作。错误将与这些之间的差异有关。通常是:

  • 权利
  • 连接字符串不正确
  • 防火墙问题

在您的情况下,访问表有效。因此,这个问题是一个权利问题。

您需要在存储过程上“执行”权限。

见:GRANT EXECUTE to all stored procedures

编辑

根据您的评论,有两种可能性:

  • 与 SQL Server 的连接未使用您认为它正在使用的安全 ID。检查连接字符串。代码是作为 Windows 应用程序运行还是在 IIS 下运行?
  • 另一件事是,prod 数据库上的存储过程与 dev 数据库上不同的架构。

编辑 2

根据您的最后评论,您的开发环境和生产环境中的存储过程的结构存在差异。

【讨论】:

  • 我对用户 ID 的存储过程使用了 Grant Execute。我还尝试重新启动 sql server。它仍然没有解决问题。当我转到 SQL Server Studio 并使用 ID 登录时,存储过程工作正常。当我通过实体框架执行时,它失败了。我检查了本地 SQL Server ID 上的设置,并且登录/安全/角色在本地和 prod 匹配。任何其他建议。 SQL Server 中是否还有我缺少的另一个设置。直接访问表仍然可以正常工作。
  • 好的。它是实体框架的问题。我创建了一个调用存储过程的临时方法。它在我的应用程序中返回一切正常。所以我可以在没有实体框架的情况下调用存储过程,但是当我在实体框架中调用存储过程时,它会在生产中失败。在我用来创建模型的开发机器上运行良好。
  • 我在客户端机器上重建了我的应用程序并更新了我的复杂功能。成功了
  • @user2011126 如果这个答案解决了您的问题,请接受这个答案,它将为未来的访问者提供充分的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 2013-10-31
  • 2013-03-19
相关资源
最近更新 更多