2012-07-27 40 views
3

ServiceStack愛好者,你好!如何在SQL Server和Mars中使用ormlite?

我們是軍團(我希望如此),所以請幫兄弟出來:)

我試圖填充一個SQL Server 2008中存儲過程調用兩個集合返回兩個結果。 我有我的連接字符串「MultipleActiveResultSets =真」,但我仍然得到這個錯誤:

'r.NextResult()' threw an exception of type '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; 
      } 
     } 
}); 

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

感謝,

薩米爾

回答

3

我已經找到一種方法,但我有小巧玲瓏的更換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; 
       } 
      } 

它完美的作品,是快兩倍(從40毫秒到20毫秒)比之前的MARS改善。

+0

非常好!你介意解釋你如何「用Dapper替換[d] ormLite」? – 2013-05-26 17:57:30