¿Cómo usar dapper para mapear un procedimiento simple almacenado en c #?

.net c# dapper stored-procedures

Pregunta

Mi procedimiento almacenado simplemente devuelve una string . Ejemplo: este procedimiento almacenado devuelve "en-US"

CREATE PROCEDURE [dbo].[P_GetStringConfig](  
  @iCode CHAR(20))  
AS  
BEGIN  
  SET NOCOUNT ON  

  SELECT Value  
  FROM  T_SReq_Config WITH (NOLOCK)  
  WHERE Code = @iCode  

  IF @@ERROR <> 0  
  RETURN @@ERROR  

  RETURN 0  
END

Estoy usando Dapper así:

using (var connection = new SqlConnection(GetConnectionString()))
            {
                var result = connection.Query<ModelClass>(
                                                    "P_GetStringConfig",
                                                    new {@iCode = "MCode"},
                                                    commandType:     CommandType.StoredProcedure).First();
            }

donde mi ModelClass es

class ModelClass
{
  string result {get;set;}
}

Pero obteniendo null .

¿Alguna idea de lo que me estoy perdiendo aquí? (¿o hay algún otro método para llamar esto?)

Respuesta aceptada

Probablemente debería tener el resultado de su propiedad nombrado como el campo devuelto por el SP (valor), pero esto crea un conflicto con una palabra reservada

Por lo tanto, cambie el SP para cambiar el nombre del campo devuelto como propiedad de su modelo

CREATE PROCEDURE [dbo].[P_GetStringConfig](  
  @iCode CHAR(20))  
AS  
BEGIN  
  SET NOCOUNT ON  

  SELECT Value AS result
  FROM  T_SReq_Config WITH (NOLOCK)  
  WHERE Code = @iCode  

  IF @@ERROR <> 0  
  RETURN @@ERROR  

  RETURN 0  
END

Además, sugiero que cambie el código para usar FirstOrDefault en caso de que su SP no encuentre nada, su código generará una excepción.

 var result = connection.Query<ModelClass>("P_GetStringConfig",
                                            new {@iCode = "MCode"},
                                            commandType:CommandType.StoredProcedure)
                                            .FirstOrDefault();


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é