Dapper ストアドプロシージャ

  1. ストアドプロシージャ(Stored Procedure):データベース側にあらかじめSQLロジックを作成し、アプリケーションから呼び出して実行します。
  2. Dapperでストアドプロシージャを呼び出すポイント:CommandType.StoredProcedure を指定する
  3. 匿名クラスまたはエンティティオブジェクトでパラメータを渡すと、ストアドプロシージャの入力引数へ自動的にマッピングされます。
  4. サンプル用途:MySQLのストアドプロシージャを作成し、IDを指定してstudentテーブルのデータを削除します。

MySQL ストアドプロシージャ作成

-- 学生データ削除用ストアドプロシージャを作成
CREATE DEFINER=`root`@`localhost` PROCEDURE `Delete_Student_PROC`(IN `id` INT)
BEGIN
    DELETE FROM student WHERE Id = id;
ENDCode language: JavaScript (javascript)
  • IN id int:入力パラメータ、削除対象の主キー値を受け取る
  • BEGIN ~ END:ストアドプロシージャの処理本体
DROP PROCEDURE IF EXISTS Delete_Student_PROC;

ストアドプロシージャを呼び出す

using System.Data;
using MySql.Data.MySqlClient;
using Dapper;
using System.Configuration;

static void Main(string[] args)
{
    var connStr = ConfigurationManager.ConnectionStrings["StudentConnection"].ConnectionString;
    using (IDbConnection db = new MySqlConnection(connStr))
    {
        // 引数の解説:
        // 第1引数:ストアドプロシージャ名
        // 第2引数:渡すパラメータ
        // 第3引数:コマンド種別をストアドプロシージャに指定必須
        int affectedRows = db.Execute(
            "Delete_Student_PROC",
            new { id = 2 },
            commandType: CommandType.StoredProcedure
        );

        Console.WriteLine($"影響を受けた行数:{affectedRows}");
    }
    Console.ReadKey();
}Code language: JavaScript (javascript)

結果セットを返すストアドプロシージャ

ストアドプロシージャが検索結果を返す場合は .Query<T>() を使用します

List<Student> list = db.Query<Student>(
    "GetAllStudent_PROC",
    null,
    commandType: CommandType.StoredProcedure
).ToList();Code language: PHP (php)
  • 通常SQL:commandType: CommandType.Text(既定値、省略可)
  • ストアドプロシージャ:commandType: CommandType.StoredProcedure(明示的に指定が必要)

Dapper ストアドプロシージャ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です