Pergunta

ServiceStack aficionados, olá!

Nós somos legião (espero que sim), então, por favor, ajude um irmão :)

Eu estou tentando preencher duas coleções com um servidor SQL Server 2008 chamada de procedimento armazenado que retornar dois conjuntos de resultados.Eu tenho "MultipleActiveResultSets=True" no meu seqüência de caracteres de conexão, mas eu ainda estou recebendo este erro:

'r.NextResult()' emitiu uma exceção do tipo Do sistema'.InvalidOperationException'

Aqui é o meu código:

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

Isso é possível?Se assim for, alguém por favor pode me mostrar um exemplo de como fazer isso?

Obrigado,

Samir

Foi útil?

Solução

Eu encontrei uma maneira, mas eu tive que substituir ormLite com o 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;
                }
            }

Funciona perfeitamente e é duas vezes mais rápido (a partir de 40 ms 20 ms) do que antes da MARS melhoria.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top