如何在SQL Server和Mars上使用ormlite?

c# dapper mars ormlite-servicestack

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;
          }
      }
 });

這可能嗎?如果是這樣,有人可以告訴我一個如何做到這一點的例子嗎?

謝謝,

薩米爾

一般承認的答案

我找到了一種方法,但我不得不用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毫秒)。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因