2017-05-10 25 views
0

我想用Dapper調用一個存儲過程,到目前爲止我看到的所有代碼都是通過用@字符指定存儲過程參數來完成的。這意味着我不能簡單地定義模型類並將其傳遞到Dapper的Query或Execute方法中,重新翻譯模型實例,這似乎浪費了時間和內存。這是我真正需要做的嗎?使用Dapper調用T-SQL存儲過程時,是否需要使用'@'?

例如,下面的代碼接受模型實例。該模型具有sp_GetUser表的所有屬性。我希望Dapper在調用它時將這些模型屬性傳遞給存儲過程的參數。這是這種情況還是我真的需要定義在'參數'參數中傳遞的對象?

public IList<User> GetUsers(UserSP user) 
    { 
     using (var cn = new SqlConnection(ConnectionString)) 
     { 
      var users = cn.Query<User>("sp_GetUsers", 
        param: new 
        { 
         @Id = user.Id, 
         @NAme = user.Name, 
         @Age = user.Age 
        }, 
        commandType: CommandType.StoredProcedure).ToList(); 
      return users; 
     } 
    } 
+1

不,你不需要使用@字符數限制(HTTPS:/ /github.com/StackExchange/Dapper#parameterized-queries) – peco

+0

太棒了。我是否仍然只需要傳入可映射到過程參數的那些屬性? –

+0

你可以試試嗎? param:用戶 – Crowcoder

回答

0

嘗試這樣的事情

public class ReportIndex 
    { 
     public int SlideNumber { get; set; } 
     public string ChartName { get; set; } 
     public string SheetName { get; set; } 
    } 

填補了類短小精悍

public List<ReportIndex> GetReportIndex(int reportId) 
    { 
     List<ReportIndex> reportIndex = null; 

     using (var conn = new SqlConnection(connString)) 
     { 
      conn.Open(); 

      var p = new DynamicParameters(); 
      p.Add("@ReportId", reportId); 

      reportIndex = conn.Query<ReportIndex>("sp_ReportGetReportIndex", 
             p, 
             commandType: CommandType.StoredProcedure).ToList(); 
     } 

     return reportIndex; 
    } 
+0

你爲什麼使用'@'?你爲什麼使用'新的DynamicParameters()'? –

+0

這是我使用短小精靈向SP發送參數的方式。 –

+0

我問這是因爲這篇文章中的問題是關於Dapper調用中的'@'字符。對我的問題的第一個評論回答了我的問題。 –