【问题标题】:When calling a T-SQL stored procedure with Dapper do I need to use '@'?使用 Dapper 调用 T-SQL 存储过程时,我需要使用“@”吗?
【发布时间】:2017-10-08 22:17:57
【问题描述】:

我想用 Dapper 调用一个存储过程,到目前为止我看到的所有代码都是通过使用 @ 字符指定存储过程参数来实现的。这意味着我不能简单地定义一个模型类并将其传递给 Dapper 的 Query 或 Execute 方法并重新翻译模型实例,这似乎是在浪费时间和内存。这是我真正需要做的吗?

例如,下面的代码接受一个模型实例。该模型具有 sp_GetUser 表的所有属性。我希望 Dapper 在调用它时将这些模型属性传递到存储过程的参数中。是这种情况还是我真的需要定义在“param”参数中传递的对象?

    public IList<User> GetUsers(UserSP user)
    {
        using (var cn = new SqlConnection(ConnectionString))
        {
            var users = cn.Query<User>("sp_GetUsers",
                    param: new
                    {
                        @Id = user.Id,
                        @NAme = user.Name,
                        @Age = user.Age
                    },
                    commandType: CommandType.StoredProcedure).ToList();
            return users;
        }
    }

【问题讨论】:

  • 不,你不需要使用@字符(github.com/StackExchange/Dapper#parameterized-queries
  • 太棒了。我还需要只传入那些可以映射到过程参数的属性吗?
  • 你可以试试吗?参数:用户
  • 现在,很遗憾没有。
  • 是的,只允许那些可以映射到过程参数的属性。否则会抛出异常。

标签: c# tsql stored-procedures dapper


【解决方案1】:

试试这样的

班级

 public class ReportIndex
    {
        public int SlideNumber { get; set; }
        public string ChartName { get; set; }
        public string SheetName { get; set; }
    }

用精巧的方式填满班级

public List<ReportIndex> GetReportIndex(int reportId)
    {
        List<ReportIndex> reportIndex = null;

        using (var conn = new SqlConnection(connString))
        {
            conn.Open();

            var p = new DynamicParameters();
            p.Add("@ReportId", reportId);

            reportIndex = conn.Query<ReportIndex>("sp_ReportGetReportIndex",
                                        p,
                                        commandType: CommandType.StoredProcedure).ToList();
        }

        return reportIndex;
    }

【讨论】:

  • 你为什么使用'@'?你为什么使用'new DynamicParameters()'?
  • 这是我使用 dapper 向 SP 发送参数的方式。
  • 我问这个问题是因为这篇文章中的问题是关于 Dapper 调用中的“@”字符。我的问题的第一条评论回答了我的问题。
猜你喜欢
  • 1970-01-01
  • 2010-10-10
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
相关资源
最近更新 更多