实体框架无法运行存储过程

时间:2013-12-07 18:21:31

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

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

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

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

以下是日志中的错误消息:

  

日期/时间:12/7/2013 12:23:41 PM

     

标题:错误
  消息:执行命令定义时发生错误。有关详细信息,请参阅内部异常   堆栈跟踪:
  在System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior behavior)
  at System:Data.Objects.ObjectContext.CreateFunctionObjectResult [TElement](EntityCommand entityCommand,ReadOnlyMetadataCollection 1 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,Nullable 1 diaToParm, Nullable 1 hubFromParm,Nullable`1 hubToParm)在C:\ Users \ Public \ Documents \ Projects \ Fan Info \ Fan Info \ Model1.Designer.vb:第201行   at FanInfo.frmMain.LoadSearchResults()in C:\ Users \ Public \ Documents \ Projects \ Fan Info \ Fan Info \ Main.vb:line 208

1 个答案:

答案 0 :(得分:1)

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

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

在您的情况下访问表Works。因此问题是权利问题。

您需要在存储过程中执行“执行”。

请参阅:GRANT EXECUTE to all stored procedures

修改

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

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

修改2

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