各位大侠,提问一个关于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
拜读了一下您的心血之作,但是基于目前项目规划不允许使用其他方式,所以也只能继续研究EF了
还是非常感谢您提供的解决方案,稍等会好好研究一下,
另:【冰麟轻武】提出的一些建议非常中肯,对于您的这套解决方案的推广及应用都有非常积极的作用
@紫洋: 谢谢;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参数的值了。。。。。
那我到底是做了什么。。。没做什么。。。。%>_<%
其实EF这种设计是有问题的.至少很别扭
这个是由于EF的延迟加载导致的,为了提高性能!ToList()就阻止了延迟加载!
我也被坑了好久!刚想到延迟加载,一时忘记了可以用tolist,还准备用 ContextDB来着,正好看到你的这个了!感谢! 我是在控制器层才ToList(),已经获取不到数据层的out了!
感谢,项目中也遇到了需要返回结果集和参数的情况。