关于ef调用存储过程返回多结果集的问题

srym 2015-10-19 08:43:41
ef为6.0版本. 数据库sql2008 (后以为是bug换成sql2005,但错误依旧)

edmx使用xml格式 returntype已经改了。
返回的3个结果集的 complex也已经定义过了,并且已经看到有模板生成的对应的实体类。
返回的三个结果集对应的ResultMapping 也已经添加好了。
现在问题如下:
在我的代码中必须使用如下格式:(db 为DbContext 对应的 实例化对象 proc 为对应存储过程的名字)

var result1=db.proc();
var result2=db.proc().GetNextResult<t2>();
var result3=db.proc().GetNextResult<t2>().GetNextResult<t3>();
可以很正确的返回我需要的数据。

请问各位大神:
为什么 我将代码改为
var result1=db.proc();
var result2=result1.GetNextResult<t2>();
var result3=result2.GetNextResult<t3>();
List<t3> t3=result3.tolist(); 报索引超出了数组界限 这个错误。求指点。拜托了,在线等。
...全文
786 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wh_liang 2015-10-22
  • 打赏
  • 举报
回复
怀着歉意来观摩,帮老师顶下!
exception92 2015-10-19
  • 打赏
  • 举报
回复
var result2=result1.GetNextResult<t2>(); var result3=result2.GetNextResult<t3>(); List<t3> t3=result3.tolist(); -》这样写 个人理解为 result2的内容应该会重新计算了,result3也同理。你再toList的时候 找不到对应的索引值?纯属个人猜测。
ajianchina 2015-10-19
  • 打赏
  • 举报
回复
这样的异常我其实是怀疑你的查询数据里面有个别数据在sql语句里执行的话是超出了索引范围 你不愿意通过查询分析器以不同条件执行查询检测,那你至少应该通过sqlserver profiler来跟踪一下查询语句,你的第一种写法没报异常,不代表存储过程没有问题,只是GetNextResult不会报出异常而已。 如果你还是不愿意做这样的前期检查,就当是帮你顶一下帖子吧。
  • 打赏
  • 举报
回复
好吧,这也就不知道原因了……
srym 2015-10-19
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
http://www.codeproject.com/Articles/675933/Returning-Multiple-Result-Sets-from-an-Entity-Fram 不知道你什么问题,但这个帖子里面是可以的
using (var dbContext = new StoreDBEntities())
    {
        var results = dbContext.GetAllCategorisAndProducts();
        //Get first enumerate result set
        categProd.Categories.AddRange(results);
        //Get second result set
        var products = results.GetNextResult<Product_SprocResult>();
        categProd.Products.AddRange(products);
        //Return all result sets
        return categProd;
    }
我就是按照 这个 文章 知道写的。 所以无比郁闷
  • 打赏
  • 举报
回复
http://www.codeproject.com/Articles/675933/Returning-Multiple-Result-Sets-from-an-Entity-Fram 不知道你什么问题,但这个帖子里面是可以的
using (var dbContext = new StoreDBEntities())
    {
        var results = dbContext.GetAllCategorisAndProducts();
        //Get first enumerate result set
        categProd.Categories.AddRange(results);
        //Get second result set
        var products = results.GetNextResult<Product_SprocResult>();
        categProd.Products.AddRange(products);
        //Return all result sets
        return categProd;
    }
srym 2015-10-19
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
这个,重复发帖总归是不好的
额。。 就当一个问题200分吧。 实在想知道 到底为什么
  • 打赏
  • 举报
回复
这个,重复发帖总归是不好的

17,739

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧