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