Dapper Call almacenó el procedimiento y el resultado del mapa a la clase

c# dapper sql-server stored-procedures

Pregunta

Tengo un procedimiento almacenado T-SQL:

CREATE PROCEDURE [dbo].[GetRequestTest] 
        @RequestId UNIQUEIDENTIFIER
AS
BEGIN
    SELECT 
        Request.Amount,
        Request.Checksum 
    FROM 
        Request 
    WHERE
        RequestId = @RequestId
END

Clase de mapeo C #:

public class CustomTest : Itest
{
    public decimal Amount {get;set;}
    public string Checksum { get; set; }
}

Llamo tratando de invocar el procedimiento almacenado usando Dapper:

public void Load(CustomTest obj, Guid RequestId)
{
    using (var con = base.GetClosedConnection())
    {
        con.Open();

        var p = new DynamicParameters();
        p.Add("@RequestId", dbType: DbType.Guid, direction: ParameterDirection.Input);               

        var result = con.ExecuteReader("[dbo].[GetRequestTest]", param: p, commandType: CommandType.StoredProcedure);

        while (result.Read())
             obj.Amount = (decimal)result["Amount"];
    }            
}

Pero el resultado es nulo

Traté de llamar para poner la instrucción SQL del procedimiento almacenado directamente en el código C #, y funciona bien, pero no funciona con el procedimiento almacenado.

Alguna idea, ¿cómo hacer que funcione?

Respuesta aceptada

Usted llama método incorrecto:

public void Load(CustomTest obj, Guid RequestId)
{
    using (var con = base.GetClosedConnection())
    {
        con.Open();                

        //result is list of CustomTest
        var result = db.Query<CustomTest>("GetRequestTest", new {RequestId},
                         commandType: CommandType.StoredProcedure);
    }            
}

Cómo usar dapper: https://github.com/StackExchange/dapper-dot-net


Respuesta popular

using (var con = base.GetClosedConnection())
{
    var result = conn.Query<CustomTest>("exec [dbo].[GetRequestTest] @id", new {Id = RequestId});
}

El procedimiento almacenado de nombres de columna o los retornos de consulta deben ser los mismos que los nombres de propiedad de CustomTest (por ejemplo, Cantidad, Suma de comprobación). Como resultado, recibirá IEnumerable con los datos apropiados.



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é