3

ServiceStack 愛好家の皆さん、こんにちは!

私たちは軍団です(そう願っています)ので、兄弟を助けてください:)

2 つの結果セットを返す 1 つの SQL Server 2008 ストアド プロシージャ コールで 2 つのコレクションを作成しようとしています。接続文字列に "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

方法を見つけましたが、ormLite を Dapper に置き換える必要がありました。

            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 改善前の 2 倍の速さ (40 ミリ秒から 20 ミリ秒) です。

于 2012-07-28T17:24:02.010 に答える