¿Cómo usar ormlite con SQL Server y Mars?

c# dapper mars ormlite-servicestack

Pregunta

¡Usuarios de ServiceStack, hola!

Somos legión (eso espero), así que ayuda a un hermano :)

Estoy intentando llenar dos colecciones con una llamada a procedimiento almacenado de SQL Server 2008 que devuelve dos conjuntos de resultados. Tengo "MultipleActiveResultSets = True" en mi cadena de conexión, pero sigo recibiendo este error:

'r.NextResult ()' lanzó una excepción de tipo 'System.InvalidOperationException'

Aquí está mi 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;
          }
      }
 });

es posible? Si es así, ¿alguien puede mostrarme un ejemplo de cómo hacerlo?

Gracias,

Samir

Respuesta aceptada

Encontré una manera pero tuve que reemplazar ormLite con 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 perfectamente y es dos veces más rápido (de 40 ms a 20 ms) que antes de la mejora de MARS.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué