Вопрос

ServiceStack aficionados, привет!

Мы легион (надеюсь так), поэтому, пожалуйста, помогите брату :)

Я пытаюсь заполнить два коллекции с одним SQL Server 2008 сохраненной вызов процедуры, который возвращает два результатов. У меня есть «мультиплексированные материалы= 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;
          }
      }
 });
.

Это возможно?Если это так, может кто-то, пожалуйста, покажешь мне пример, как это сделать?

Спасибо,

Самир

Это было полезно?

Решение

Я нашел путь, но мне пришлось заменить 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;
                }
            }
.

Это работает отлично и в два раза ускорена (от 40 мс до 20 мс), чем до улучшения Mars.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top