虽然在使用过程中遇到了种种问题,但是还是通过搜索前辈的文章找到了解决方案。唯独今天遇到这个 执行存储过程让我很是困惑
首先,在设计器里导入一个存储过程。竟然在 数据库连接的上下文里找不到这个调用方法。这个有悖常理。我反复的实验了有几次。拖表。托视图 都OK 啊。
我开始怀疑是不是我Vs的问题。这个时候也去网上搜索了相关问题,但是关于这个问题的解决方法非常少(Google经常访问不了 ,只能用Baidu)。网上的文章很多都是互相抄袭。答案都差不多。说EF 对存储过程支持不好。需要手动修改 设计器生成的代码。我晕。。 这不坑爹么? 我开始怀疑当初我采用Ef 是不是个错误。这是我想如果重现采用 Linq 我要疯掉。我又是个完美主义者,肯定也不能容忍 项目里出现两种数据库连接方式,何况是一个数据库的。
继续搜索。。
就这样一点一点的找到了调用的方法。先不管能否执行成功。找到调用方法也算是好的开始。
导入的存储过程需要设置调用方法(Vs里叫 导入函数映射)
1.设计器右键点击 “模型浏览器”,就可以看到树菜单里有你先前导入的 存储过程
2.右键存储过程,点击 “添加函数导入” ,这里也是我困惑的地方,返回以下内容的集合 会让你选择 返回结果。
我返回没有结果。但是我有 OutPut参数。我以为要选择标量,其实应该选择无。(这里也可以返回生成的实体或是 自定义属性)
点击确定。这样就可以像普通表一样调用了。至于参数,也就是存储过程的参数,
3.这里OutPut参数我要解释一下。存储过程的最后一个参数传入的是 ObjectParameter 这个对象
这个就是用于接收 OutPut参数的,
var objectParams = new System.Data.Objects.ObjectParameter("total", DbType.Int32);
var upResult= db.Up_GetXX(1000, objectParams);
var result=objectParams.Value;
这样 result 就是 存储过程 OutPut 返回参数值。