Entity Framework 6无法找到存储过程问题求助
Entity Framework 6调用存储过程提示“找不到存储过程”的解决办法
1. 核对连接字符串指向的数据库
确认应用运行时使用的连接字符串,和你在Visual Studio中测试存储过程时的数据库是同一个。打开App.config/Web.config里的connectionStrings节点,检查ECCustomEntities对应的数据库服务器、库名是否正确——很多时候是代码连到了测试环境数据库,而存储过程只在本地库部署了。
2. 检查存储过程的权限与所有者
- 给应用用的数据库账号添加存储过程执行权限:
GRANT EXECUTE ON [dbo].[spGetReptInfoByTransID] TO [应用登录账号] - 如果存储过程所有者不是
dbo,EF调用时要带上所有者前缀,比如dc.dbo_spGetReptInfoByTransID(...),或者重新更新模型确保包含所有者信息。
3. 刷新EDMX模型并清理缓存
- 打开EDMX文件,右键空白处选从数据库更新模型,确保选中新增的存储过程完成更新。
- 清理项目(右键项目→清理)后重新生成,同时删除项目下的
bin和obj目录,避免旧模型缓存干扰。 - 检查EDMX的Model.Store部分,确认存储过程的名称、参数和数据库里的完全一致。
4. 查看EF实际生成的SQL
在调用存储过程前添加日志输出,看EF到底发了什么SQL到数据库:
dc.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);
运行后看输出窗口的SQL,确认调用的存储过程名称有没有拼写错误、前缀缺失。
代码小优化
你代码里判断objectResult的方式有问题,ObjectResult<T>不能和String.Empty比较,改成:
if (objectResult != null && objectResult.Any())
内容的提问来源于stack exchange,提问作者C. Michael Warden
相关产品推荐
相关产品推荐

