如何使用dapper在c#中映射一个简单的存储过程?

时间:2014-08-28 09:30:45

标签: c# .net stored-procedures dapper

我的存储过程只返回string。例如:此存储过程返回"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

我正在使用Dapper这样:

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

我的ModelClass

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

但获得null

任何想法我在这里错过了什么? (或者还有其他方法可以调用它吗?)

1 个答案:

答案 0 :(得分:2)

可能您应该将您的属性结果命名为SP(值)返回的字段,但这会与保留关键字产生冲突

因此,更改SP以重命名作为模型属性返回的字段

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

另外,我建议更改代码以使用FirstOrDefault,以防SP没有找到任何代码会引发异常的内容

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