Cuando llamo a un procedimiento almacenado de T-SQL con Dapper, ¿necesito usar '@'?

c# dapper stored-procedures tsql

Pregunta

Quiero llamar a un procedimiento almacenado con Dapper y todo el código que he visto hasta ahora lo hace al especificar los parámetros del procedimiento almacenado con el carácter @. Esto significa que no puedo simplemente definir una clase de modelo y pasarla al método Dapper's Query o Execute al volver a traducir la instancia del modelo, lo que parece una pérdida de tiempo y memoria. ¿Es esto lo que realmente necesito hacer?

Por ejemplo, el siguiente código acepta una instancia modelo. El modelo tiene todas las propiedades de la tabla sp_GetUser. Me gustaría esperar que Dapper pase esas propiedades del modelo a los parámetros del procedimiento almacenado cuando lo llama. ¿Es este el caso o realmente necesito definir el objeto que se pasa en el parámetro '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;
        }
    }

Respuesta popular

Pruebe algo como esto

la clase

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

llena la clase con apuesto

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué