首页 新闻 赞助 找找看

EF 6 调用存储过程时返回多结果集和OUTPUT参数问题

0
悬赏园豆:30 [已解决问题] 解决于 2013-11-13 11:45

各位大侠,提问一个关于EF6调用存储过程时返回多结果集和OUTPUT参数问题

目前已经可以调用存储过程并且可以返回多个结果集。

但是有一个问题:

在返回多个结果集的时候无法获取OUTPUT参数,而返回单个结果集的时候是可以获取OUTPUT参数的

我在网上找到的一个例子是获取多个结果集的,然后自己修改了一下存储过程,添加了一个OUTPUT参数,多结果集能获取,OUTPUT参数一直是NULL

// 设定output参数
var recordcount = new System.Data.Entity.Core.Objects.ObjectParameter("recordcount", typeof(Int32));

//调用存储过程,并传入output参数
var results = entity.GetAllCategorisAndProducts(recordcount);

// recordcount 一直为null
MessageBox.Show(recordcount.Value.ToString());

有碰到这种问题的大侠还请指点一二,不胜感激

多结果集例子:

http://www.codeproject.com/Articles/675933/Returning-Multiple-Result-Sets-from-an-Entity-Fram

紫洋的主页 紫洋 | 初学一级 | 园豆:177
提问于:2013-11-13 09:56
< >
分享
最佳答案
0
收获园豆:30
迅捷网络[来送福利] | 小虾三级 |园豆:616 | 2013-11-13 11:16

拜读了一下您的心血之作,但是基于目前项目规划不允许使用其他方式,所以也只能继续研究EF了

还是非常感谢您提供的解决方案,稍等会好好研究一下,

另:【冰麟轻武】提出的一些建议非常中肯,对于您的这套解决方案的推广及应用都有非常积极的作用

紫洋 | 园豆:177 (初学一级) | 2013-11-13 11:34

@紫洋: 谢谢;0

迅捷网络[来送福利] | 园豆:616 (小虾三级) | 2013-11-13 11:35
其他回答(3)
0

无意中解决了。。。汗一下。。。解决方式让我很是郁闷。。。跟大家说一下吧

返回多结果集参照上面给出的链接的例子就可以实现,不多说什么了

取得结果集后需要调用 GetNextResult<T>();方法,然后将取得的多个结果集全部toList();

例如

// 设定output参数
var recordcount = new System.Data.Entity.Core.Objects.ObjectParameter("recordcount", typeof(Int32));

//调用存储过程,并传入output参数
//这里是第一个结果集
var result1 = entity.GetAllCategorisAndProducts(recordcount);

//这里是第二个结果集
var result2 = result1.GetNextResult<T>();

//转换为list
var list1 = result1.toList();

var list2 = result2.toList();

// 什么都不用做,直接输出recordcount,可以取到值了。。
MessageBox.Show(recordcount.Value.ToString());

最让我无语的就是:这两个list 取得后什么都不用做,就可以取到OUTPUT参数的值了。。。。。
那我到底是做了什么。。。没做什么。。。。%>_<%

紫洋 | 园豆:177 (初学一级) | 2013-11-13 11:44

其实EF这种设计是有问题的.至少很别扭

支持(0) 反对(0) 迅捷网络[来送福利] | 园豆:616 (小虾三级) | 2013-11-13 11:48
0

这个是由于EF的延迟加载导致的,为了提高性能!ToList()就阻止了延迟加载!
我也被坑了好久!刚想到延迟加载,一时忘记了可以用tolist,还准备用 ContextDB来着,正好看到你的这个了!感谢! 我是在控制器层才ToList(),已经获取不到数据层的out了!

一杯晨光 | 园豆:204 (菜鸟二级) | 2014-12-23 11:23
1

感谢,项目中也遇到了需要返回结果集和参数的情况。

jimcsharp | 园豆:244 (菜鸟二级) | 2015-02-03 13:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册