3

ServiceStack 爱好者,你好!

我们是军团(我希望如此),所以请帮助兄弟:)

我正在尝试使用一个返回两个结果集的 SQL Server 2008 存储过程调用来填充两个集合。我的连接字符串中有“MultipleActiveResultSets=True”,但我仍然收到此错误:

“r.NextResult()”引发了“System.InvalidOperationException”类型的异常

这是我的代码:

IList<ProjectMember> projectMembers = null;

IList<Project> projects = DbFactory.Run(dbCnx =>
{
     using (var dbCmd = dbCnx.CreateCommand())
     {
          dbCmd.CommandType = CommandType.StoredProcedure;
          dbCmd.CommandText = "mySchema.myStoredProc";
          dbCmd.Parameters.Add(new SqlParameter("@categoryId", categoryId));

          using (profiler.Step("ProjectService.myStoredProc"))
          {
              var r = dbCmd.ExecuteReader();
              projectMembers = r.ConvertToList<ProjectMember>();
              return r.NextResult() ? r.ConvertToList<Project>() : null;
          }
      }
 });

这可能吗?如果是这样,有人可以告诉我一个如何做到这一点的例子吗?

谢谢,

萨米尔

4

1 回答 1

3

我找到了一种方法,但我不得不用 Dapper 替换 ormLite:

            using(var cnx = DbFactory.CreateConnection(Global.ConnectionString))
            {
                using (var multi = cnx.QueryMultiple("mySchema.myStoredProc", new { communityId, categoryId }, commandType: CommandType.StoredProcedure))
                {
                    var projectMembers = multi.Read<ProjectMember>().ToList();
                    var projects = multi.Read<Project>().ToList();
                    BindProjectMembers(projects, projectMembers);

                    return projects;
                }
            }

它运行良好,速度是 MARS 改进之前的两倍(从 40 毫秒到 20 毫秒)。

于 2012-07-28T17:24:02.010 回答