2017-05-10 3 views
0

Ich möchte eine gespeicherte Prozedur mit Dapper aufrufen und der gesamte Code, den ich bisher gesehen habe, tut dies, indem er die Parameter der gespeicherten Prozedur mit dem @ -Zeichen angibt. Dies bedeutet, dass ich nicht einfach eine Modellklasse definieren und sie an Dappers Query- oder Execute-Methode übergeben kann, indem ich die Modellinstanz neu übersetze, was wie eine Verschwendung von Zeit und Speicher erscheint. Ist das, was ich wirklich tun muss?Wenn ich eine gespeicherte T-SQL-Prozedur mit Dapper aufrufen muss, muss ich '@' verwenden?

Zum Beispiel akzeptiert der folgende Code eine Modellinstanz. Das Modell verfügt über alle Eigenschaften der Tabelle sp_GetUser. Ich würde erwarten, dass Dapper diese Modelleigenschaften beim Aufruf in die Parameter der gespeicherten Prozedur übergibt. Ist das der Fall oder muss ich wirklich das übergebene Objekt im Parameter 'param' definieren?

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

Nein füllen, müssen Sie nicht das @ -Zeichen verwenden müssen (https://github.com/StackExchange/Dapper#parameterized-queries) – peco

+0

Ehrfürchtig. Muss ich noch nur die Eigenschaften übergeben, die den Parametern der Prozedur zugeordnet werden können? –

+0

Können Sie es einfach versuchen? param: user – Crowcoder

Antwort

0

Probieren Sie etwas wie dieses

die Klasse

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

die Klasse mit adrett

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

Warum benutzen Sie das '@'? Warum verwenden Sie 'new DynamicParameters()'? –

+0

So sende ich Parameter mit Dapper an SP. –

+0

Ich frage, weil die Frage in diesem Post speziell über das '@' Zeichen in Dapper Anrufe ist. Der erste Kommentar zu meiner Frage beantwortete meine Frage. –

Verwandte Themen