C#でDapperORMを使用する方法

オブジェクトリレーショナルマッパー(ORM)は、プログラミング言語のオブジェクトモデルとリレーショナルデータベースのデータモデルの間に存在するインピーダンスの不一致を排除するために、長い間使用されてきました。Dapperは、StackOverflowチームによって開発されたオープンソースの軽量ORMです。Dapperは、主に軽量であるため、他のORMと比較して非常に高速です。

Dapperは、パフォーマンスと使いやすさを念頭に置いて構築されました。トランザクション、ストアドプロシージャ、またはデータの一括挿入を使用して、静的オブジェクトバインディングと動的オブジェクトバインディングの両方をサポートします。

VisualStudioにDapperORMをインストールする

Dapperの使用を開始するには、次の手順に従います。

  1. VisualStudioを開きます 
  2. [ファイル]-> [新規]-> [プロジェクト]をクリックします
  3. 「新規プロジェクト」ダイアログから「Web-> ASP.NetWebアプリケーション」を選択します
  4. Webプロジェクトの名前を指定します
  5. ASP.Netの空のプロジェクトテンプレートを選択します
  6. [OK]をクリックしてプロジェクトを保存します

これにより、空のASP.NetWebアプリケーションプロジェクトが作成されます。

NuGetがインストールされている場合は、NuGetを使用してDapperをインストールできます。ソリューションエクスプローラーウィンドウでプロジェクトを選択し、[NuGetパッケージの管理...]を右クリックしてDapperを見つけます。次に、[インストール]をクリックして、Dapperのインストールを開始します。Dapperが正常にインストールされたら、準備は完了です。

DapperORMを使用した.NetのCRUD

Dapperを使用して、データベースに対してCRUD操作を実行するコードを記述してみましょう。次のフィールドを持つAuthorというテーブルを含むという名前のデータベースについて考えてみます。

  • ID
  • ファーストネーム
  • 苗字

Dapperを使用する場合は、簡単にするために、このデータベーステーブルのエンティティクラス(POCOクラス)を作成する必要があります。これは、データベースのAuthorテーブルに対応するAuthorという名前のエンティティクラスです。

public class Author

    {

        public int Id { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

    }

Query()Dapperの拡張メソッドを使用すると、データベースからデータを取得して、オブジェクトモデルにデータを入力できます。次のメソッドは、Authorテーブルからすべてのレコードを取得し、それらをメモリに格納して、コレクションを返します。

public List ReadAll()

{

         using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings[“AdventureWorks”].ConnectionString))

         {

            return db.Query

             (“Select * From Author”).ToList();

        }

    }

Dapperフレームワークを活用するには、プログラムにDapper名前空間を含める必要があることに注意してください。

次の方法は、Authorテーブルから特定のレコードを検索する方法を示しています。

public Author Find(int id)    

    {

        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))

        {

            return db.Query(“Select * From Author “ + 

            WHERE Id = @Id”, new { id }).SingleOrDefault();

        }

    }

Execute()Dapperフレームワークのメソッドを使用して、データベースにデータを挿入、更新、または削除できます。このメソッドは、クエリの実行時に影響を受けた行の数を示す整数値を返します。

次の方法は、Dapperフレームワークを使用してレコードを更新する方法を示しています。

public int Update(Author author)

    {

        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))

        {

            string sqlQuery +

            “ LastName = @LastName “ + “WHERE Id = @Id”;

            int rowsAffected = db.Execute(sqlQuery, author);

            return rowsAffected;

        }

    }

上記のコードスニペットでわかるように、このUpdate()メソッドは、影響を受けた行の数、つまり更新されたレコードの数を返します。この例では、1つのレコードのみが更新されているため、メソッドは成功すると1を返します。

DapperORMを使用したスト​​アドプロシージャ

Dapperを使用してストアドプロシージャを操作するには、QueryまたはExecuteメソッドを呼び出すときにコマンドタイプを明示的に指定する必要があります。これは、Dapperでストアドプロシージャを使用する方法を示す例です。

 public List Read()

    {

        using (IDbConnection db = new SqlConnection (ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))

        {

            string readSp;

            return db.Query(readSp, commandType: CommandType.StoredProcedure).ToList();

        }

    }

Dapperフレームワークはトランザクションもサポートします。つまり、必要に応じてトランザクション操作を使用できます。これを行うには、ADO.Netでトランザクションを操作するときに通常行うようにBeginTransaction()EndTransaction()メソッドとメソッドを利用できます。次に、BeginTransactionおよびEndTransactionメソッド呼び出し内にトランザクションステートメントを記述する必要があります。

Dapper micro ORMは非常に軽量で、使いやすいです。SQLは生成されませんが、クエリの結果をPOCO(プレーンな古いCLRオブジェクト)に簡単にマッピングできます。何よりも、Entity Frameworkを使用する場合よりもはるかに高速な実行速度が得られます。実際、ADO.Netとほぼ同じです。 

C#でさらに多くのことを行う:

  • C#でAutoMapperを操作する方法
  • C#で抽象クラスとインターフェイスを使用する場合
  • C#でスレッドを操作する方法
  • C#でDapperORMを使用する方法
  • C#でリポジトリデザインパターンを実装する方法
  • C#で簡単なロガーを実装する方法
  • C#でデリゲートを操作する方法
  • C#でAction、Func、およびPredicateデリゲートを操作する方法
  • C#でlog4netを操作する方法
  • C#でリフレクションを操作する方法