使用Dapper調用T-SQL存儲過程時,是否需要使用“@”?

c# dapper stored-procedures tsql

我想用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;
        }
    }

熱門答案

嘗試這樣的事情

班上

 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;
    }


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow