Tengo un procedimiento almacenado T-SQL:
CREATE PROCEDURE [dbo].[GetRequestTest] @RequestId UNIQUEIDENTIFIER AS BEGIN SELECT Request.Amount, Request.Checksum FROM Request WHERE RequestId = @RequestId ENDClase de mapeo de C#:
public class CustomTest : Itest { public decimal Amount {get;set;} public string Checksum { get; set; } }Estoy llamando para intentar 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 declaració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?
Llamas al 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
using (var con = base.GetClosedConnection()) { var result = conn.Query<CustomTest>("exec [dbo].[GetRequestTest] @id", new {Id = RequestId}); }Los nombres de las columnas del procedimiento almacenado o los resultados de las consultas deben ser los mismos que los nombres de las propiedades de CustomTest (por ejemplo, cantidad, suma de control). Como resultado, recibirá IEnumerable con los datos correspondientes.