2017-05-10 1 views
0

Dapper를 사용하여 저장 프로 시저를 호출하려고합니다. 지금까지 본 모든 코드는 @ 문자로 저장 프로 시저 매개 변수를 지정하여 수행합니다. 이는 간단히 모델 클래스를 정의하여 Dapper의 Query 또는 Execute 메소드로 전달할 수 없다는 것을 의미합니다. 모델 인스턴스를 다시 변환하면 시간과 메모리가 낭비되는 것처럼 보입니다. 이게 내가 정말로해야 할 일이야?Dapper로 T-SQL 저장 프로 시저를 호출 할 때 '@'를 사용해야합니까?

예를 들어, 아래 코드는 모델 인스턴스를 허용합니다. 모델에는 sp_GetUser 테이블의 모든 속성이 있습니다. Dapper는 호출 할 때 저장 프로 시저의 매개 변수에 해당 모델 속성을 전달해야합니다. 이 경우 또는 'param'매개 변수에 전달할 개체를 실제로 정의해야합니까?/:이

같은

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

아니, 당신은에서 @ - CHARACTER를 (사용할 필요가없는 https로 클래스를 채울 /github.com/StackExchange/Dapper#parameterized-queries) – peco

+0

굉장합니다. 프로 시저의 매개 변수에 매핑 할 수있는 속성 만 전달해야합니까? –

+0

시도해 볼 수 있습니까? param : user – 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

이것은 dapper를 사용하여 SP에 매개 변수를 보내는 방법입니다. –

+0

이 게시물의 질문은 Dapper 호출에서 '@'문자에 관한 것이기 때문에 질문합니다. 제 질문에 대한 첫 번째 의견이 제 질문에 대답했습니다. –

관련 문제