Dapper Appelez la procédure stockée et mappez le résultat à la classe

c# dapper sql-server stored-procedures

Question

J'ai une procédure stockée T-SQL:

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

Classe de mappage C #:

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

J'appelle essayant d'invoquer la procédure stockée en utilisant 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"];
    }            
}

Mais le résultat est nul

J'ai essayé d'appeler pour mettre l'instruction SQL de la procédure stockée directement dans le code C # - et cela fonctionne bien, mais cela ne fonctionne pas avec la procédure stockée.

Des idées - comment le faire fonctionner?

Réponse acceptée

Vous appelez la mauvaise méthode:

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

Comment utiliser dapper: https://github.com/StackExchange/dapper-dot-net


Réponse populaire

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

Les procédures stockées ou les retours de requête de noms de colonne doivent être identiques aux noms de propriété de CustomTest (par exemple, Amount, Checksum). En conséquence, vous recevrez IEnumerable rempli avec les données appropriées.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi