Wie benutzt man Ormlite mit SQL Server und Mars?

c# dapper mars ormlite-servicestack

Frage

ServiceStack-Fans, hallo!

Wir sind Legion (hoffe ich), also hilf bitte einem Bruder :)

Ich versuche, zwei Sammlungen mit einem gespeicherten SQL Server 2008-Prozeduraufruf zu füllen, der zwei Resultsets zurückgibt. Ich habe "MultipleActiveResultSets = True" in meiner Verbindungszeichenfolge, aber ich bekomme immer noch diesen Fehler:

'r.NextResult ()' hat eine Ausnahme vom Typ 'System.InvalidOperationException' ausgelöst

Hier ist mein Code:

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

Ist das möglich? Wenn ja, kann mir bitte jemand ein Beispiel zeigen, wie das geht?

Vielen Dank,

Samir

Akzeptierte Antwort

Ich habe einen Weg gefunden, aber ich musste OrmLite durch Dapper ersetzen:

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

Es funktioniert perfekt und ist doppelt so schnell (von 40 ms bis 20 ms) als vor der MARS-Verbesserung.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow