Quando si chiama una procedura memorizzata T-SQL con Dapper devo usare '@'?

c# dapper stored-procedures tsql

Domanda

Voglio chiamare una procedura memorizzata con Dapper e tutto il codice che ho visto finora lo fa specificando i parametri della stored procedure con il carattere @. Ciò significa che non posso semplicemente definire una classe del modello e passarla nel metodo Query o Execute di Dapper con la ri-traduzione dell'istanza del modello, che sembra una perdita di tempo e di memoria. È questo quello che devo veramente fare?

Ad esempio, il codice seguente accetta un'istanza del modello. Il modello ha tutte le proprietà della tabella sp_GetUser. Mi aspetto che Dapper passi tali proprietà del modello nei parametri della stored procedure quando lo chiama. È questo il caso o ho davvero bisogno di definire l'oggetto che viene passato nel parametro '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;
        }
    }

Risposta popolare

Prova qualcosa di simile

la classe

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

riempire la classe con azzeccato

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


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché