Wenn ich eine gespeicherte T-SQL-Prozedur mit Dapper aufrufen muss, muss ich '@' verwenden?

c# dapper stored-procedures tsql

Frage

Ich möchte eine gespeicherte Prozedur mit Dapper aufrufen, und all der 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?

Der folgende Code akzeptiert beispielsweise 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;
        }
    }

Beliebte Antwort

Probieren Sie so etwas aus

die Klasse

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

füllen Sie die Klasse mit Dapper

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum