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

本文关键字:一个 简单 存储过程 dapper 何使用 映射 | 更新日期: 2023-09-27 18:19:39

My存储过程只返回一个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

你知道我在这里错过了什么吗?(或者有其他方法可以调用它吗?)

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

您可能应该将属性结果命名为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();