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

クラスをdapperで埋める

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